1

私は2つのuibuttonと1つのラベルを持っており、longpressgestureはこれらのコントロールにバインドされています。いずれかのコントロールでlongpressが実行された場合、以下でlongpressが実行されたオブジェクトを取得する方法は、私が作成したコードです。

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[btn addTarget:self action:@selector(wasDragged:withEvent:) forControlEvents:UIControlEventTouchDragInside];
//[self.view addSubview:btn];
btn.userInteractionEnabled = YES;

// add it
[self.view addSubview:btn];
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
                                           initWithTarget:self 
                                           action:@selector(handleLongPress:)];
longPress.minimumPressDuration = 1.0;
[btn addGestureRecognizer:longPress];

以下は長押しで呼び出される関数です

-(void)handleLongPress:(id)sender{
 }

送信者の説明を印刷すると、

 <UILongPressGestureRecognizer: 0x6aa4480; state = Began; view = <UIRoundedRectButton 0x6aa9570>; target= <(action=handleLongPress:, target=<ViewController 0x6a8cc60>)>>

それから、longpressイベントが発生したときにオブジェクトの参照を取得するにはどうすればよいですか?つまり、UiLabelとUibuttonのどちらを使用したかを知るにはどうすればよいですか?

4

2 に答える 2

2

UIGestureRecognizer(親クラス)のビュープロパティを確認するだけです。

@property(nonatomic、readonly)UIView * view

ジェスチャレコグナイザがアタッチされているビュー。(読み取り専用)

@property(nonatomic、readonly)UIView * viewディスカッションaddGestureRecognizer:メソッドを使用して、ジェスチャーレコグナイザーをUIViewオブジェクトにアタッチ(または追加)します。

于 2012-08-15T18:36:13.820 に答える
1
-(void)handleLongPress:(UILongPressGestureRecognizer *)sender{


    if ([sender.view isKindOfClass:[UIButton class]]) {

            UIButton *myButton = (UIButton *)sender.view; // here is your sender object or Tapped button

            if (myButton.tag == 1) {

                    //sender is first Button. Because we assigned 1 as Button1 Tag when created.
            }
            else if (myButton.tag == 2){

                    //sender is second Button. Because we assigned 2 as Button2 Tag when created.
            }
    }

    if ([sender.view isKindOfClass:[UILabel class]]) {

        UILabel *myLabel = (UILabel *)sender.view; // here is your sender object or Tapped label.

    }


}
于 2012-08-16T04:41:32.547 に答える