2011-10-30 9 views
4

UIButtonに触れ、所有者よりも異なるのコードを実行したいと思います。UIButtonコードでタッチハンドラを設定

私は、ボタンの所有者ClassA)にtouchUpInsideを行い、その後、私が呼ばたいことClassB内のメソッドを呼び出すことができます実現が、これを迅速する方法はありますか?

アイデア:

  • ClassBClassA->UIButton

  • の委譲も持っている私はよく分からないClassB

内の機能を使用するためのプログラミングでtouchUpInsideコールを設定しますどのようにを達成するこれらのいずれかの deas :(入力はマスです!

答えて

17

1つのオプションは、

[myButton addTarget:yourOtherClass action:@selector(mySelector:) forControlEvents:UIControlEventTouchUpInside]; 

を使用してボタンを設定することですが、あなたは割り当てが解除されたオブジェクトにメッセージを送ることができるようにtargetが保持されていないため、これは少し危険です。

プロトコルで定義された方法は、私が代わりに行うために(self.delegate)のチェックを行っている可能性がオプションではありませんでしたとして、あなたが代わりにあなたの実装に続いて

MyController.m 

- (IBAction)buttonTapped:(UIButton *)button 
{ 
    if ([self.delegate respondsToSelector:@selector(myController:buttonTapped:)]) { 
     [self.delegate myController:self buttonTapped:button]; 
    } 
} 

をプロトコル

MyController.h 

@protocol MyControllerDelegate 
- (void)myController:(MyController *)controller buttonTapped:(UIButton *)button; 
@end 

@interface MyController : UIViewController 

@property (nonatomic, assign) id <MyControllerDelegate> delegate; 

- (IBAction)buttonTapped:(UIButton *)button; 

@end 

を設定できますrespondsToSelectorの代わりに設定されていることを確認してください。

+1

私はアプリの「ターゲット」を決して捨てないので、最初のことを使用しました。しかし、私はあなたのアプリが変わる可能性があるので、それを使用する理由を教えてくれて非常に感謝しています。 – Jacksonkr

関連する問題