首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIScrollView和touchesBegan / touchesEnded等

UIScrollView和touchesBegan / touchesEnded等
EN

Stack Overflow用户
提问于 2015-03-05 08:49:31
回答 5查看 14.2K关注 0票数 6

我有一个带有两个子视图的UIView,我们称之为视图A

  • 一个基本的UIView,称为B
  • 一个UIScrollView,叫做C

我在视图A中重写了以下方法

  • - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  • - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

当我触摸视图BtouchesBegan:withEvent:touchesEnded:withEvent:时被调用,但是如果我触摸UIScrollView (查看C),则不会调用。

我知道这是预期的行为,但我正在努力理解原因。我找不到任何明确的答案。有什么想法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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

出发地:ref/doc/uid/TP40006922

票数 6
EN

Stack Overflow用户

发布于 2016-06-16 14:29:54

使用TapGestureRecognizer而不是touchBegan方法

代码语言:javascript
复制
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   
}

迅捷版:

代码语言:javascript
复制
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 ")

}
票数 9
EN

Stack Overflow用户

发布于 2016-07-26 11:54:49

如果有滚动视图,thouchesBegan方法将无法工作,因为如果想滚动,就必须在故事板中启用userInteractionEnabled。如果你成功了,它就会触发。因此,解决方案是使用TapGestureRecognizer,将其添加到viewDidLoad中:

代码语言:javascript
复制
let singleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: "MyTapMethod:")
    singleTapGestureRecognizer.numberOfTapsRequired = 1
    singleTapGestureRecognizer.enabled = true
    singleTapGestureRecognizer.cancelsTouchesInView = false
    myscrollView.addGestureRecognizer(singleTapGestureRecognizer)

然后在控制器中添加这个MyTapMethod。

代码语言:javascript
复制
func MyTapMethod(sender: UITapGestureRecognizer) {
        //NSLog("touchesBegan")
        self.view.endEditing(true)
    }

这很好用。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28873530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档