Mar*_*ard 5 objective-c uiscrollview uiview ios
我有UIView2个子视图,我们称之为视图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),则没有调用.
我知道这是预期的行为,但我想知道为什么.我找不到任何明确的答案.任何的想法?
使用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
}
Run Code Online (Sandbox Code Playgroud)
Swift版本:
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 ")
}
Run Code Online (Sandbox Code Playgroud)
如果你有滚动视图thouchesBegan方法将无法工作,因为如果想要滚动你必须在故事板中启用userInteractionEnabled为YES.如果你把它变为NO,它就会触发.因此解决方案是使用TapGestureRecognizer将此添加到viewDidLoad:
let singleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: "MyTapMethod:")
singleTapGestureRecognizer.numberOfTapsRequired = 1
singleTapGestureRecognizer.enabled = true
singleTapGestureRecognizer.cancelsTouchesInView = false
myscrollView.addGestureRecognizer(singleTapGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)
然后在控制器中添加此MyTapMethod.
func MyTapMethod(sender: UITapGestureRecognizer) {
//NSLog("touchesBegan")
self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)
这工作正常.
您至少有两个选择:
1)"通过设置userInteractionEnabled来NO为您滚动视图".更多信息请访问/sf/answers/1757565491/
2)您的UIScrollView的子类 - 例如,使用此https://dl.dropboxusercontent.com/u/19438780/ClassScrollViewDelegate.zip
UPDATE
为什么?请再次阅读文档:
"因为滚动...它必须知道触摸是否表示滚动的意图......它会暂时拦截触摸事件......滚动视图取消子视图中的任何跟踪并自行执行滚动"
最重要的是:**
子类可以覆盖touchesShouldBegin:withEvent:inContentView:,pagingEnabled和touchesShouldCancelInContentView:方法
从这里:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScrollView_Class/index.html#//apple_ref/doc/uid/TP40006922
| 归档时间: |
|
| 查看次数: |
11546 次 |
| 最近记录: |