非常に基本的なチェックボックスであるUIButtonサブクラスを構築しました。すべてが機能しています(たとえば、私が期待しているイベントを取得しています。私が期待したときにdrawRectメソッドが呼び出されます)。しかし、イメージは描画されません。私は自分のイメージがゼロではなく、イメージが異なることを確認しました。チェックボックスの図面で何が問題になっていますか?
コード:
-(void)awakeFromNib {
[super awakeFromNib];
[self addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
self.state=YES;
}
-(void) buttonClick {
self.state = !self.state;
[self setNeedsDisplay];
}
-(void)drawRect:(CGRect)rect {
UIImage *img = nil;
if (self.state) {
img = [self backgroundImageForState:UIControlStateSelected];
}
else {
img = [self backgroundImageForState:UIControlStateNormal];
}
[img drawInRect:rect];
}
それが描かれる前に、 'IMG' の値を確認するには:
Printing description of img:
<UIImage: 0x52a710>
(gdb) continue
Printing description of img:
<UIImage: 0x52a5d0>
背景画像は、NIBに設定されています。 IBで選択した状態を変更すると、適切なイメージが表示されます。私はまた、コールから有効なイメージを取得しています(NIBに設定されていないimageForStateを取得しようとしない場合)。
サブクラスの理由は、チェックボックスが必要なためです。 UIButtonはそうしておらず、UISwitchは、最も功利主義的な見解を除いて、醜悪で醜いです。
思考?
ありがとうございました。
TJ
編集:あなたがbackgroundImageForStateを設定しているサブクラス
状態を追跡することはできません私はあなたの最初のセットに関する上記の質問に詳細を追加しました質問。私がシミュレータに入るのは、NIBで設定したデフォルトの画像です。私はチェックボックスがコードからではなく、NIBにシリアル化されるときから来ていると思います。 自分のrectを使用するようにコードを変更しました(これは私が渡されたのと同じです)、それには影響しませんでした。 私はすべてのコードを追加して、カスタム図面が表示されるようにしました。 UIButtonは私が必要とすることをしません。 –
私はこのことをより良いやり方にすることができます。ユーザーがボタンをタップしていなくても、「選択状態」を維持できる必要があります。 –