UIPageViewController:返回当前可见视图你怎么知道里面显示的当前页面/视图是UIPageViewController什么?我已经覆盖了viewDidAppear我的子视图的方法,因此他们在viewDidAppear方法中向父视图发送了一个id 。但问题是:我无法可靠地将该id用作显示页面的id。因为如果用户转动页面但中途决定停止转动并将页面放回,viewDidAppear则已经被调用。(视图在卷曲页面后面可见)。也许我应该只在当前视图消失的情况下切换到新的id。但我想知道是否有更简单的方法来返回当前可见的视图?
3 回答
繁星coding
TA贡献1797条经验 获得超4个赞
您应该手动跟踪当前页面。委托方法pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:将告诉您何时更新该变量。该方法的最后一个参数transitionCompleted:可以告诉您用户是否完成了翻页过渡。
一只斗牛犬
TA贡献1784条经验 获得超2个赞
从iOS 6开始,我发现viewControllersUIPageViewController 的属性不断更新,因此它将始终保存一个代表当前页面的视图控制器,而不是其他内容。因此,您可以通过调用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条经验 获得超4个赞
不幸的是,以上所有方法都没有帮助我。不过,我通过使用标签找到了解决方案。可能它不是最好的,但它有效,并希望它可以帮助某人:
- (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 关注
- 1227 浏览
添加回答
举报
0/150
提交
取消
