20

クリックイベントを処理するためのロジックを含む「よりスマートな」ボタンを作成するために、UIButton をサブクラス化しようとしています。

これを達成するための最良の方法は何ですか?onClick メソッドをオーバーライドする必要があるだけですか? または、イベント ハンドラーを登録する必要がありますか (もしそうなら、UIButton を初期化する方法がたくさんあるので、どこでこれを行う必要がありますか?)

4

1 に答える 1

37

この問題には、あなたが提案したものよりも優れた解決策があると思いますが、質問に直接答えるには: UIButton のサブクラスは、他のすべての人がタッチ イベントを観察するのと同じ方法でタッチ イベントを観察します。

// In your UIButton subclass

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super buttonWithType:UIButtonTypeCustom];
    if (self) {
        [self addTarget:self action:@selector(didTouchButton) forControlEvents:UIControlEventTouchUpInside];
    }
    return self;
}

- (void)didTouchButton {
    // do whatever you need to do here
}

重要な注意: を使用[UIButton buttonWithType:]してボタンを作成することはできません。initまたはを使用する必要がありinitWithFrame:ます。UIButton には便利な初期化子がありますが、initWithFrame:それでも指定された初期化子です。

于 2012-08-28T20:54:57.887 に答える