1

次のコードを1つのメソッドに切り詰めようとしています。現在、8つのUIButtonインスタンスのタップを処理するために8つの同一のメソッドが使用されています。UIButton理想的には、引数としてをに渡したい@selectorので、8つの同一のメソッドが必要になるのを避けることができます。セレクターに引数を渡す構文に苦労しています。handleTap: onButton:できれば方法が欲しいです。現在、ボタン1から8で、同じ操作を行う8つの方法(handleTap1から)があります。handleTap8

UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap1:)];
UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap2:)];
UITapGestureRecognizer *tap3 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap3:)];
UITapGestureRecognizer *tap4 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap4:)];
UITapGestureRecognizer *tap5 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap5:)];
UITapGestureRecognizer *tap6 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap6:)];
UITapGestureRecognizer *tap7 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap7:)];
UITapGestureRecognizer *tap8 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap8:)];
[let1Button addGestureRecognizer: tap1];
[let2Button addGestureRecognizer: tap2];
[let3Button addGestureRecognizer: tap3];
[let4Button addGestureRecognizer: tap4];
[let5Button addGestureRecognizer: tap5];
[let6Button addGestureRecognizer: tap6];
[let7Button addGestureRecognizer: tap7];
[let8Button addGestureRecognizer: tap8];

これはメソッドの1つの例です。明らかに、let1Button任意のボタンを表すために渡された引数に置き換えたいと思います。

- (void) handleTap1: (UITapGestureRecognizer *) recognizer
{
    [_box setText: [_box.text stringByAppendingString: [let1Button titleForState: UIControlStateNormal]]];
    [let1Button setUserInteractionEnabled:NO];
    [let1Button setTitleColor: [UIColor blackColor] forState: UIControlStateNormal];

}
4

3 に答える 3

4

UIViewUIButtonのサブクラスUIView)にはプロパティがありますview。ジェスチャレコグナイザがアタッチされているビューです

UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap:)];
[let1Button addGestureRecognizer: tap1];

- (void) handleTap: (UITapGestureRecognizer *) recognizer
{
    UIButton *button = (UIButton *)recognizer.view;
    [_box setText: [_box.text stringByAppendingString: [UIButton titleForState: UIControlStateNormal]]];
    [UIButton  setUserInteractionEnabled:NO];
    [UIButton setTitleColor: [UIColor blackColor] forState: UIControlStateNormal];

}
于 2012-11-24T16:00:21.697 に答える
1

ジェスチャレコグナイザは、アクションのパラメータとして渡されません。アクションメソッド内で、ビューにアクセスできます。

UIView myView = recognizer.view
if (myView isKindOfClass:[UIButton class])
{
   ...
}
于 2012-11-24T16:01:44.987 に答える
1

ジェスチャレコグナイザにはプロパティビューがあります。これを確認して、ジェスチャーが実行されたボタンを特定できます。

于 2012-11-24T15:52:37.327 に答える