我已经在申请了一段时间,但由于NDA,我无法提出这个问题.
我的Viewcontroller加载了UIPageViewController.视图控制器具有由PageViewControllers手势识别器覆盖的按钮.例如,我在viewcontroller的右侧有一个按钮,当你按下按钮时,PageViewController接管并更改页面.
如何让按钮接收触摸并取消PageViewController中的手势识别器?
我认为PageViewController使我的ViewController成为其视图的子视图.
我知道我可以关闭所有的手势,但这不是我正在寻找的效果.
我宁愿不子类PageViewController苹果表示,这个类是不是要被继承.
搜索了很多这个,但还没找到合适的解决方案.
是否可以禁用a的反弹效果UIPageViewController并仍然使用UIPageViewControllerTransitionStyleScroll?
我想获取pageViewController的当前索引,我不知道如何获取可见页面索引.
func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool,previousViewControllers: [UIViewController],transitionCompleted completed: Bool)
{
// How to get it?
}
Run Code Online (Sandbox Code Playgroud) uiviewcontroller uipagecontrol ios uipageviewcontroller swift
在过去的几天里,我一直在努力解决这个问题,经过这个杂耍之后,我发现我只需要数据源方法的当前索引来更新当前可见的页码
我有这个UIPageViewController数据源方法,我需要使用当前索引来获取委托方法的当前可见页面previousViewControllers transitionCompleted:(BOOL)completed
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerAfterViewController:(UIViewController *)viewController {
NSString *path = [[NSBundle mainBundle] pathForResource:@"pages" ofType:@"pdf"];
NSURL *pdfurl = [NSURL fileURLWithPath:path];
PDFDocument = CGPDFDocumentCreateWithURL((__bridge CFURLRef)pdfurl);
contentViewController = [[ContentViewController alloc] initWithPDFAtPath:path];
currentIndex = [modelArray indexOfObject:[(ContentViewController *)viewController page]];
if (currentIndex == totalPages - 1) {
return nil;
}
contentViewController.page = [modelArray objectAtIndex:currentIndex + 1];
return contentViewController;
}
Run Code Online (Sandbox Code Playgroud)
我对如何将当前索引语句从datasource方法写入委托方法以更新当前可见页面感到困惑.
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{
if (!completed)
{
return;
}
//currentIndex = [[self.pageViewController.viewController lastObject]];
currentIndex = [self indexOfObject:contentViewController]; …Run Code Online (Sandbox Code Playgroud) 我一直在使用UIPageController不同的控制器之间导航.现在我想在底部添加这些点,这样用户就可以看到他在哪个控制器上.这是通过UIPageControl.是否有简单的方法将这两者结合起来?
presentationIndexForPageViewController返回值的文档说:
返回要在页面指示器中反映的所选项目的索引.
但是,这很模糊.当用户滚动浏览页面视图控制器时,它是否会调用此方法并期望正确的索引?
此外,还没有保证什么时候 pageViewController:viewControllerBeforeViewController:和pageViewController:viewControllerAfterViewController : . 文档刚提到:
响应于导航手势,[An]对象[提供]视觉控制器根据需要基于页面视图控制器.
事实上,我已经看到在某些情况下发生缓存.例如,如果您向前导航两个页面,它看起来只会被取消分配.否则,它希望将其保留在缓存中,以防用户在页面视图控制器中向后移动.
这是否意味着我需要一种一致的方式来通过注册作为UIPageViewControllerDelegate然后不断更新此值来知道当前正在显示哪个页面?
我想在页面视图控制器中获取当前的视图控制器.怎么做 是否有一些代表打电话或什么.
我想用这个跟踪索引UIPageViewController.每当我刷卡我需要index++或index--.无论何时向后或向后滑动,都会调用此委托方法:
- (void)pageViewController:(UIPageViewController *)pvc didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
// If the page did not turn
if (!completed)
{
// You do nothing because whatever page you thought
// the book was on before the gesture started is still the correct page
return;
}
// I want to check here whenever the page was swiped back or further
}
Run Code Online (Sandbox Code Playgroud)
如果用户向后或向后滑动,我该如何检查此方法?我知道有2个DataSource方法"viewControllerAfterViewController"和"viewControllerBeforeViewController",但我无法检查页面转换是否已完成(我可以在上面的方法中执行此操作)任何想法我怎么知道用户是否向后滑动或进一步以上方法?
我正在寻找一种可靠的方法来跟踪 UIPageViewController 当前索引。
这个问题是众所周知的;尽管 viewController 被正确呈现,但很难跟踪当前索引。
我认为在 SO 社区中刷新这个主题会很好,因为它由于某种原因仍未解决
我在这里浏览了许多线程,但大多数答案都已过时或标记为不可靠(结果取决于用户是完全滑动还是仅滑动了一半等)
我访问过这个线程,但它没有提供任何明确正确的答案。
我试过了:
1) 跟踪 viewController 的视图标签 -链接- 总是返回 0
2)查看两个 UIPageViewController 方法中的索引变量,viewControllerBeforeViewController以及viewControllerAfterViewControlle
它的结果是不可预测的,有时它会跳过一个索引等。
有没有人想出一个好方法,可靠的方法来跟踪 UIPageCiewController 索引以利用它(例如打印当前索引)?
我很欣赏 obj-c 和 swift 实现,但 swift 是我正在寻找的。