3

カスタム UIButton サブクラスに drawRect を使用すると、強調表示されたときにボタンを描画するために呼び出されないようです。タッチ イベントでボタンの setNeedsDisplay を呼び出す必要がありますか?

4

3 に答える 3

13

簡単な解決策を見つけました。

UIButtonサブクラスに次のメソッドを追加するだけです。

-(void)setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    [self setNeedsDisplay];
}

それでおしまい!

于 2012-08-29T09:20:28.837 に答える
6

私が知る限り、UIButtonをサブクラス化する簡単な方法はありません。

UIButtonは、初期化子によって返される実際のクラスタイプではありません。UIButtonは、一連のプライベートクラスのフロントのようなものです。

あなたが持っていたと言う:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
NSLog(@"myButton type: %@", [myButton description]);

ログに返されるタイプは「UIRoundedRectButton」であることがわかります。それに関する問題は、「UIRoundedRectButton」を拡張する必要があるということです。UIButtonにのみ返されるプライベートクラスであるため、これは不可能です。

その上、「UIRoundedRectButton」だけが返される可能性のあるクラスではありません。これらはすべてプライベートです。

言い換えると、UIButtonは拡張に適さない方法で構築されました。

于 2009-07-06T13:24:20.690 に答える
1

UIButtonサブクラスに以下を追加して、同じ問題と満足のいく成功を収めました

- (void)awakeFromNib {
    [self addTarget:self action:@selector(redraw) forControlEvents:UIControlEventAllEvents];
}

- (void)redraw {
    [self setNeedsDisplay];
    [self performSelector:@selector(setNeedsDisplay) withObject:self afterDelay:0.15];
}
于 2011-05-14T21:57:39.133 に答える