drawRectは、強調表示されたときにカスタムUIButtonサブクラスに対して呼び出されません

StackOverflow https://stackoverflow.com/questions/823524

  •  05-07-2019
  •  | 
  •  

質問

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

役に立ちましたか?

解決

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

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

あなたが言った:

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

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

その" UIRoundedRectButton"の上返される可能性のある唯一のクラスはすべてプライベートではありません。

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

他のヒント

簡単な解決策が見つかりました。

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

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

それだけです!

同じ問題があり、 UIButton サブクラスに追加された次のもので満足のいく成功を収めました

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

- (void)redraw {
    [self setNeedsDisplay];
    [self performSelector:@selector(setNeedsDisplay) withObject:self afterDelay:0.15];
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top