我在UIButton中添加了UILongPressGestureRecognizer。当我按下UIButton时,它会按预期突出显示。但是,当调用UILongPressGestureRecognizer选择器时,突出显示将被关闭。
UILongPressGestureRecognizer *longpressGesture =
[[UILongPressGestureRecognizer alloc] initWithTarget:self
action:@selector(longPressHandler:)];
longpressGesture.minimumPressDuration = 5;
[longpressGesture setDelegate:self];
[self.myUIButton addGestureRecognizer:longpressGesture];
[longpressGesture release];
- (void)longPressHandler:(UILongPressGestureRecognizer *)gestureRecognizer {
NSLog(@"longPressHandler");
}
在上面的示例中,按住按钮5秒后调用选择器。在调用选择器之前,该按钮会突出显示,但在调用选择器时会突然显示该按钮,即使我仍然按下该按钮。
任何人都可以解释为什么会发生这种情况,以及如何预防?我希望按下按钮在整个按下时保持高亮显示。感谢。
答案 0 :(得分:37)
经过进一步研究,我发现这是由于手势识别器的默认行为,一旦识别出手势就会取消层次结构中的触摸。因此,一旦手势识别器识别出一个手势,它就会取消对UI按钮的触摸,然后不再突出显示,因为它不再有触摸事件。
可以使用 cancelsTouchesInView 属性
更改此行为longpressGesture.cancelsTouchesInView = NO;
将此设置为NO会将触摸传递给响应者链。
答案 1 :(得分:0)
这有些推测......:我怀疑GestureRecognizer的触发是将按钮放在响应器链中,这使得它失去焦点。我想不出任何阻止这种情况的方法,但可能会有一些解决方法: