如何设置 UIPageViewController(分页类型)手势委托
Posted
技术标签:
【中文标题】如何设置 UIPageViewController(分页类型)手势委托【英文标题】:How can I set UIPageViewController (Paging Type) gestures delegate 【发布时间】:2016-01-13 15:38:10 【问题描述】:我一直在尝试修复 UIPageViewControllers 的手势与添加到视图和位于页面控制器内的 UIViewControllers 的手势之间的冲突。 我只需要让 UIPageViewController 成为其手势的代表,我该怎么做?
-
我已经在页面视图中遵循并实现了 UIGestureDelegate 方法,但它们从未被调用过。
我还循环检查 UIPageViewControllers 中的gestureRecognizers 属性中是否存在手势。正如预期的那样,该数组为 nil,如文档“..仅在过渡样式为 'UIPageViewControllerTransitionStylePageCurl' 时才填充。”中所述。
我尝试获取底层 UIScrollView 并将其平移手势委托设置为 UIPageViewController。无法这样做。
如何设置 UIPageViewController 手势(特别是 Pan Gesture)的委托。
【问题讨论】:
【参考方案1】:这不会为 UIPageViewController 的内置平移手势设置手势委托,但我通过获取底层滚动视图然后在滚动视图上设置新的平移手势来设法解决手势冲突。这个新的 Pan 手势将 UIPageViewController 作为其委托,因此我能够获得对手势委托的调用。
-(UIScrollView *)scrollViewInsidePageControl
for (UIView * view in self.view.subviews)
if([view isKindOfClass:[UIScrollView class]])
return (UIScrollView *)view;
return nil;
在-viewDidLoad:
self.internalScrollView = [self scrollViewInsidePageControl];
self.customPanGesture = [UIPanGestureRecognizer new];
self.customPanGesture.delegate = self;
[self.internalScrollView addGestureRecognizer:_customPanGesture];
上面的代码在UIPageViewController
实例上调用了UIGestureRecognizerDelegate
的协议方法
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
if(otherGestureRecognizer.view == self.internalScrollView)
return NO;
else
return YES;
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
if (gestureRecognizer == _customPanGesture)
// Did required handling here
return YES;
【讨论】:
【参考方案2】:要设置 UIPageViewController 委托,只需将“UIPageViewControllerDelegate”和“UIPageViewControllerDataSource”添加到您的 UIPageViewController。然后将 UIPageViewController 的委托和数据源设置为 self(委托)。
class MyPageViewController : UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource
override func viewDidLoad()
super.viewDidLoad()
self.dataSource = self
self.delegate = self
如果你不设置dataSource,你将无法让UIPageViewController在视图之间滑动手势。
【讨论】:
此后委托不会收到 UIGestureRecognizerDelegate 协议中提到的方法调用。以上是关于如何设置 UIPageViewController(分页类型)手势委托的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式在 Xcode 中快速设置 UIPageViewController 的过渡样式?
故事板:如何使用故事板为 UIPageViewController 设置初始视图控制器?
如何在XIB(Interface Builder)中使用UIPageViewController的子类来设置DataSource、Delegate和TransitionStyle
UIPageViewController - 如何在横向模式下自定义左右页面?