触摸检测UIButton在UIScrollView中添加为SubView

时间:2011-07-15 07:41:10

标签: iphone ios uiscrollview uibutton uitouch

我有一个带有许多按钮的滚动视图。我想在scrollView中检测UIButton上的触摸但是无法获取它们。我尝试通过子类化uiscrollview和uibutton 但失败了。如果用户按住该按钮一小段时间,比如2秒,我想检测按钮上的触摸。然后我想将按钮拖动到用户可以在滚动视图上拖动的位置。 Plz帮助我。

2 个答案:

答案 0 :(得分:4)

您不需要继承。

尝试附加到UIButton UILongPressGestureRecognizer

查看here了解更多信息。

手势识别器可从iOS 3.2获得,可以轻松完成与手势相关的所有操作。 Here你可以找到一个教程。

如果您想支持以前的版本,则必须使用其他方法:

  1. 向您的按钮添加UIControlEventTouchUpInsideUIControlEventTouchDown操作;

  2. touchDown处理程序中的
  3. 开始计算时间(用当前时间设置变量);

  4. 在touchUp处理程序中停止计时;测量差异,如果高于您的阈值,请解雇您的行动。

  5. 如果这不起作用,请提供一些有关其原因的信息。

答案 1 :(得分:1)

您可以为tag上的每个按钮设置scrollView,然后像@sergio一样为每个按钮添加UILongPressGestureRecognizer(或uicontrolevent),因此当您设置时您可以添加滚动视图中的页面:

[button addTarget:self action:@selector(someAction:)  forControlEvents:UIControlEventTouchUpInside];

UILongPressGestureRecognizer *twoSecPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(someAction:)];
            [twoSecPress setMinimumPressDuration:2];
            [button addGestureRecognizer:twoSecPress];
            [twoSecPress release];

并在你的行动..

    -(IBAction)someAction:(id)sender{
      UIButton *button=(UIButton*)sender;
          if(button.tag==YOUR_TAG){
            //do something
    }
}

-(void)someAction:(UILongPressGestureRecognizer *)recognizer {
    if (recognizer.state == UIGestureRecognizerStateBegan) {
            if ([recognizer.view isKindOfClass:[UIButton class]]) {
                UIButton *tmpButt=(UIButton *)recognizer.view;
                NSLog(@"%d", tmpButt.tag);
    }
}

(显然在.h上添加UIGestureRecognizerDelegate)