与uibutton和uilabel的UILongPressGestureRecognizer问题

时间:2012-08-15 18:33:57

标签: iphone ios uibutton gesture

我有2个uibutton和1个标签,长压力限制在这些控制之下。当在任何控件上进行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];

下面是在longpress上调用的函数

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

如果我打印发件人的描述,那么我得到

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

从中我怎样才能在长时间事件发生时获得对象的参考 我的意思是我怎么知道我是否自称UiLabel或Uibutton?

2 个答案:

答案 0 :(得分:2)

只需检查UIGestureRecognizer(父类)视图属性:

  

@property(非原子,只读)UIView * view

     

手势识别器附加到的视图。 (只读)

     

@property(非原子,只读)UIView *视图   讨论   使用addGestureRecognizer:方法将手势识别器附加(或添加)到UIView对象。

答案 1 :(得分: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.

    }


}