1

UIControlをサブクラス化し、sendAction:to:forEventメソッドをオーバーライドして、独自にカスタマイズしたUIEventを送信できるようにします(UIControlEvents変数を保持できるようにします)。ただし、処理する必要があるのはUIEventだけなので、UIControlEvents変数を保持できません。

このため、UIControlEvents変数を保持できるように、addTargetメソッドをオーバーライドする必要があると思います。


主な質問:

では、addTargetメソッドを実装して、オーバーライドせずに必要な機能を保持する方法を知っている人はいますか?さらに、アップルはデフォルトでこの情報(UIEventオブジェクトを介してUIControlEvents変数)を提供しないため、誰もがより良い解決策を知っていますか。

4

1 に答える 1

0

サブクラスで独自の addTarget メソッドを提供しますが、super を呼び出さないでください。ターゲットとオプションを保存し、自分をそのオプションのターゲットにします。そのイベントのためにアクション メソッドが送信されると、必要なアクションを実行できます。

編集:サブクラスがあり、追加されたターゲットなどを保存したい場合は、可変配列を宣言します。このメッセージが表示された場合:

- (void)addTarget:(id)target action:(SEL)action forControlEvents(UIControlEvents)controlEvents

サブクラスで、この変更可能な辞書を次のように追加します。

[myArray addObject:[@"target": ターゲット、@"action": NSStringFromSelector(action)、@"event": [NSValue valueWithBytes:&controlEvents objCType:@encode(controlEvents)]];

一見難しそうに見えますが、それほど複雑ではありません。

これで、可能なすべてのコントロール イベントについて知りたいすべての登録済みオブジェクトができました。コードは、配列を介して相互作用し、そのようなイベントやそのようなイベントについて知りたい各オブジェクトを見つけることにより、任意の controlEvent について 1 つまたは複数のターゲットにいつ通知するか、または通知するかどうかを決定できるようになりました。

次に、サブクラスは、何について通知を受けるイベントを決定します。

于 2012-08-18T12:16:29.000 に答える