UIPageViewController:返回当前可见视图你怎么知道里面显示的当前页面/视图是UIPageViewController什么?我已经覆盖了viewDidAppear我的子视图的方法,因此他们在viewDidAppear方法中向父视图发送了一个id 。但问题是:我无法可靠地将该id用作显示页面的id。因为如果用户转动页面但中途决定停止转动并将页面放回,viewDidAppear则已经被调用。(视图在卷曲页面后面可见)。也许我应该只在当前视图消失的情况下切换到新的id。但我想知道是否有更简单的方法来返回当前可见的视图?
3 回答
繁星coding
TA贡献1797条经验 获得超4个赞
您应该手动跟踪当前页面。委托方法pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:
将告诉您何时更新该变量。该方法的最后一个参数transitionCompleted:
可以告诉您用户是否完成了翻页过渡。
一只斗牛犬
TA贡献1784条经验 获得超2个赞
从iOS 6开始,我发现viewControllers
UIPageViewController 的属性不断更新,因此它将始终保存一个代表当前页面的视图控制器,而不是其他内容。因此,您可以通过调用viewControllers[0]
(假设您一次只显示一个视图控制器)来访问当前页面。
只有在页面“锁定”到位时,viewController数组才会更新,因此如果用户决定部分显示下一页,则除非他们完成转换,否则它不会成为“当前”页面。
如果要跟踪“页码”,请在通过UIPageViewController数据源方法创建视图控制器时为其分配索引值。
例如:
-(void)autoAdvance { UIViewController *currentVC = self.viewControllers[0]; NSUInteger currentIndex = [myViewControllers indexOfObject:currentVC]; if ( currentIndex >= (myViewControllers.count-1) ) return; [self setViewControllers:@[myViewControllers[ currentIndex+1 ]] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; }-(NSInteger)presentationIndexForPageViewController: (UIPageViewController *)pageViewController { // return 0; UIViewController *currentVC = self.viewControllers[0]; NSUInteger currentIndex = [myViewControllers indexOfObject:currentVC]; return currentIndex; }
但请注意这是不可靠的评论。
守着一只汪
TA贡献1872条经验 获得超3个赞
不幸的是,以上所有方法都没有帮助我。不过,我通过使用标签找到了解决方案。可能它不是最好的,但它有效,并希望它可以帮助某人:
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed { if (completed) { int currentIndex = ((UIViewController *)self.pageViewController.viewControllers.firstObject).view.tag; self.pageControl.currentPage = currentIndex; }}
在Swift :(感谢@Jessy)
func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool){ guard completed else { return } self.pageControl.currentPage = pageViewController.viewControllers!.first!.view.tag}
示例: gist
- 3 回答
- 0 关注
- 1165 浏览
添加回答
举报
0/150
提交
取消