UIControlEventTouchUpInside イベントを特定のオブジェクトに追加できることは理解していますが、このイベントをクラス全体に追加するにはどうすればよいですか?
クラス ElementButton を使用してオブジェクトを作成しましたが、不要なコードが大量に発生するため、個々のオブジェクトごとにイベントを追加したくありません。
UIControlEventTouchUpInside イベントを特定のオブジェクトに追加できることは理解していますが、このイベントをクラス全体に追加するにはどうすればよいですか?
クラス ElementButton を使用してオブジェクトを作成しましたが、不要なコードが大量に発生するため、個々のオブジェクトごとにイベントを追加したくありません。
あなたが言及しているのは、ターゲットアクションパターンと呼ばれるものの iOS の実装です。Target-action は UIControl のサブクラスでのみ使用できるためElementButton
、UIControl サブクラスでない限り、UIControlEventTouchUpInside を使用できません。
実際に UIControl サブクラスである場合は、各オブジェクトの UIControlEventTouchUpInside に登録する以外に、追加の作業を行う必要はありません。
[yourButton addTarget:self selector:@selector(buttonTapped:) forEvent:UIControlEventTouchUpInside];
他にご不明な点がございましたら、お問い合わせください。
これを試して:-
このメソッドをElementButtonクラスに追加します。
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
[self addTarget:nil action:@selector(ownMethod) forControlEvents:UIControlEventTouchUpInside];
if (self) {
// Initialization code
}
return self;
}
任意のクラスでUIControlEventTouchUpInside で呼び出したい ownMethod
配列内のすべての ElementButtons を追加してみてくださいfor loop
。
for (ElementButton *yourButton in myArray) {
[yourButton addTarget:self selector:@selector(buttonTapped:) forEvent:UIControlEventTouchUpInside];
}
すべての ElementButtons を取得するには、次のようにします。
for (ElementButton *button in [self.view subviews]) {
if(!yourArray) yourArray = [[NSMutableArray alloc]init];
[yourArray addObject:button];
}
メソッドをクラスに追加したり、各メソッドを個別に追加したりする必要はありません。ループを使用してすべてのボタンを調べ、addTarget:selector:forEvent: を使用して各ボタンにメソッドを割り当てます。ループする配列を提供するアウトレット コレクションを使用するか、これらのボタンのスーパービューのすべてのサブビューをループすることができます (サブビューが正しいクラスであるかどうかを確認します)。