UIPageController 中的 UIViewController 如何获取触摸事件?
Posted
技术标签:
【中文标题】UIPageController 中的 UIViewController 如何获取触摸事件?【英文标题】:How can a UIViewController inside a UIPageController get touch events? 【发布时间】:2013-08-01 06:00:44 【问题描述】:似乎按钮根本没有被按下。
我试过了:
UIPageViewController Gesture recognizers
但是,这里有问题
如果 UIPageViewController 的页面转换为 UIPageViewControllerTransitionStyleScroll 则
self.view.gestureRecognizers = self.pageViewController.gestureRecognizers;
NSLog(@"%@",self.pageViewController.gestureRecognizers.description);
NSLog(@"%@",self.pageViewController.gestureRecognizers.description);
只会是空的。
我尝试将我自己的gestureRecoqnizers 而不是按钮添加到UIViewControllers 的子视图中。还是不行。
所以我有一个 UIPageViewController,它显示一个 UIViewController,它的视图有一些按钮。如何按下那个按钮?
我在这里也尝试了这两种解决方案:
http://emlyn.net/posts/stopping-gesture-recognizers-in-their-tracks
没有任何作用。首先,我不能禁用 UIPageViewController 的手势识别器,因为没有这样的东西。在 scrollView 模式下,UIPageViewController 没有手势识别器。
我尝试将自己的手势识别器添加到自己的按钮中,但从未调用过。
我希望 UIPageViewController 仍然可以处理滑动。但不能点击。
我无法访问 UIPageViewControllers 的手势识别器,因为 self.pageViewController.gestureRecognizers 是空的。 UIPageViewController 似乎只是“吸收”所有点击事件。所以我的按钮没有得到它。
我可以在 UIPageViewController 前面添加按钮,但该按钮会吸收我希望 UIPageVIewController 仍能处理的滑动动作。
顺便说一句,如果我们使用来自 ios 的模板(创建一个基于页面的应用程序,并将过渡更改为滚动 pageviewcontroller.gesturerecoqnizers 将为空
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// Configure the page view controller and add it as a child view controller.
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];//Turn this to scroll view
self.pageViewController.delegate = self;
SDDataViewController *startingViewController = [self.modelController viewControllerAtIndex:0 storyboard:self.storyboard];
NSArray *viewControllers = @[startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL];
self.pageViewController.dataSource = self.modelController;
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
// Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages.
CGRect pageViewRect = self.view.bounds;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
pageViewRect = CGRectInset(pageViewRect, 40.0, 40.0);
self.pageViewController.view.frame = pageViewRect;
[self.pageViewController didMoveToParentViewController:self];
// Add the page view controller's gesture recognizers to the book view controller's view so that the gestures are started more easily.
self.view.gestureRecognizers = self.pageViewController.gestureRecognizers;
NSLog(@"%@",self.pageViewController.gestureRecognizers.description); //This is empty
while (false);
【问题讨论】:
按钮有目标和动作吗? 当然。我明白了。如果不在 UIPageViewController 内,它可以正常工作。 那么为什么是手势识别器呢?您是否将您的控制器设置为委托并检查委托方法是否被调用? 什么的代表? UIPageViewController 的手势识别器?我无法访问手势识别器。 UIPageViewController 似乎只是“吸收”所有点击事件。所以我的按钮没有得到它。我可以在 UIPageViewController 前面添加按钮,但该按钮会吸收我希望 UIPageVIewController 仍然处理的滑动动作。 你找到解决办法了吗? 【参考方案1】:也许您可以在 UIPageViewController 中设置自定义手势识别器。这样,您将能够通过 UITouch 事件进行过滤,方法是在您的手势识别器委托(用于您的 UIPageViewController)中实现它:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldReceiveTouch:(UITouch *)touch
if (touch.tapCount > 1) // It will ignore touch with less than two finger
return YES;
return NO;
这样,您将告诉 UIPageViewController 手势识别器不要关心一根手指的触摸。你必须尝试一下,但我认为它可能会奏效。这里的问题是你必须让你的用户用两根手指滑动......
查看here 以获得其他答案
【讨论】:
以上是关于UIPageController 中的 UIViewController 如何获取触摸事件?的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationController 内的 UIPageController 从顶部偏移?