我有一个带有许多按钮的滚动视图。我想在scrollView中检测UIButton上的触摸但是无法获取它们。我尝试通过子类化uiscrollview和uibutton 但失败了。如果用户按住该按钮一小段时间,比如2秒,我想检测按钮上的触摸。然后我想将按钮拖动到用户可以在滚动视图上拖动的位置。 Plz帮助我。
答案 0 :(得分:4)
您不需要继承。
尝试附加到UIButton
UILongPressGestureRecognizer
。
查看here了解更多信息。
手势识别器可从iOS 3.2获得,可以轻松完成与手势相关的所有操作。 Here你可以找到一个教程。
如果您想支持以前的版本,则必须使用其他方法:
向您的按钮添加UIControlEventTouchUpInside
和UIControlEventTouchDown
操作;
开始计算时间(用当前时间设置变量);
在touchUp处理程序中停止计时;测量差异,如果高于您的阈值,请解雇您的行动。
如果这不起作用,请提供一些有关其原因的信息。
答案 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)