我有一个带有两个子视图的UIView,我们称之为视图A
UIView,称为BUIScrollView,叫做C我在视图A中重写了以下方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event当我触摸视图B、touchesBegan:withEvent:和touchesEnded:withEvent:时被调用,但是如果我触摸UIScrollView (查看C),则不会调用。
我知道这是预期的行为,但我正在努力理解原因。我找不到任何明确的答案。有什么想法吗?
发布于 2015-03-05 14:17:31
你至少有两个选择:
1)“将userInteractionEnabled设置为滚动视图的NO”。更多信息请访问https://stackoverflow.com/a/25108078/1702413
2)子类UIScrollView --例如,使用此https://dl.dropboxusercontent.com/u/19438780/ClassScrollViewDelegate.zip
更新
为什么?请再读一遍文件:
“因为滚动..它必须知道触摸是否表示要滚动的意图.它暂时拦截一个触下事件.滚动视图取消子视图中的任何跟踪,并执行滚动自身”
和最重要的是: **
子类可以覆盖touchesShouldBegin:withEvent:inContentView: pagingEnabled和touchesShouldCancelInContentView: methods
发布于 2016-06-16 14:29:54
使用TapGestureRecognizer而不是touchBegan方法
UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
singleTapGestureRecognizer.numberOfTapsRequired = 1;
singleTapGestureRecognizer.enabled = YES;
singleTapGestureRecognizer.cancelsTouchesInView = NO;
[scrollView addGestureRecognizer:singleTapGestureRecognizer];
- (void)singleTap:(UITapGestureRecognizer *)gesture {
//handle taps
}迅捷版:
let singleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: "singleTap:")
singleTapGestureRecognizer.numberOfTapsRequired = 1
singleTapGestureRecognizer.enabled = true
singleTapGestureRecognizer.cancelsTouchesInView = false
scrollViewH.addGestureRecognizer(singleTapGestureRecognizer)
func singleTap(sender: UITapGestureRecognizer) {
println("handle taps ")
}发布于 2016-07-26 11:54:49
如果有滚动视图,thouchesBegan方法将无法工作,因为如果想滚动,就必须在故事板中启用userInteractionEnabled。如果你成功了,它就会触发。因此,解决方案是使用TapGestureRecognizer,将其添加到viewDidLoad中:
let singleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: "MyTapMethod:")
singleTapGestureRecognizer.numberOfTapsRequired = 1
singleTapGestureRecognizer.enabled = true
singleTapGestureRecognizer.cancelsTouchesInView = false
myscrollView.addGestureRecognizer(singleTapGestureRecognizer)然后在控制器中添加这个MyTapMethod。
func MyTapMethod(sender: UITapGestureRecognizer) {
//NSLog("touchesBegan")
self.view.endEditing(true)
}这很好用。
https://stackoverflow.com/questions/28873530
复制相似问题