几个想法:
基本过程:鉴于您将表格视图添加到右侧,我假设您希望向左滑动以将其滑动到位。该手势应该在主视图上,而不是在表格视图上。然后假设您想要向右滑动以将其滑回右侧,那么该手势将在obj
您的这个子控制器上进行。
处理 UIScrollView 子类时的标准手势警告:注意,在 tableview 顶部滑动手势实际上并不是 100% 可靠的,因为当我们开始向左或向右手势时,手指很容易向上或向下滑动一点,然后作为 tableview 的平移而不是滑动手势来处理。但这是一个次要的 UI 问题。(顺便说一句,这就是为什么应用程序越来越多地将滑动/平移手势添加到屏幕顶部的导航栏,而不是 tableview 本身。)
改进:如果您使用标准滑动手势,只需将 设置direction
为UISwipeGestureRecognizerDirectionLeft
或...Right
,那么手势识别系统可以很好地正确检测您的手势,处理现实世界的变化等。如果您有任何代码用于验证自己做手势(或弄乱touches
事件),然后如果您的逻辑过于严格(例如寻找零变化),您就可以看到您描述的行为y
。
最重要的是,如果您仍然遇到问题,请分享您的手势创建代码(如果手势应用条件逻辑,那么手势代码本身也是如此)。
与您手头的问题无关,建议始终让 iOS 了解您的视图控制器。如果您看到WWDC 2011 - Implementing View Controller Containment,他们会警告您让视图层次结构与控制器层次结构不同步的危险。
简而言之,仅仅将控制器的视图添加为子视图是不够的。幸运的是,修复很简单:您可以实现视图控制器包含。因此,要添加子控制器,您需要做的就是在添加子视图之前,调用:
[self addChildViewController:obj];
添加子视图并完成其框架的配置后,告诉 iOS 你已经这样做了:
[obj didMoveToParentViewController:self];
如果您不执行这两个调用,则可能会有 iOS 事件不会传递到您的视图控制器。