Objective c PageViewController当前索引不正确
我试图在用户滑动到最后一个viewcontroller(4/4)时显示一个按钮。但是索引错误地输出了错误的编号(即使显示了正确的视图控制器) 除了索引从1、2、4、2随机跳转外,所有视图都显示正确。如果我来回滑动,情况会变得更糟 为什么索引没有显示正确的索引(与显示的视图控制器一致)Objective c PageViewController当前索引不正确,objective-c,swift,Objective C,Swift,我试图在用户滑动到最后一个viewcontroller(4/4)时显示一个按钮。但是索引错误地输出了错误的编号(即使显示了正确的视图控制器) 除了索引从1、2、4、2随机跳转外,所有视图都显示正确。如果我来回滑动,情况会变得更糟 为什么索引没有显示正确的索引(与显示的视图控制器一致) 如果您使用的viewControllerAtIndex与Xcode为“基于页面的应用程序”提供的项目模板类似,则最终将通过UIPageViewControllerDataSource的方法之一调用该模板,即page
如果您使用的
viewControllerAtIndex
与Xcode为“基于页面的应用程序”提供的项目模板类似,则最终将通过UIPageViewControllerDataSource
的方法之一调用该模板,即pageViewController:viewControllerAfterViewController
或pageViewController:viewControllerBeforeViewController
。页面视图控制器调用这些方法和提供的索引的时间完全取决于其内部实现,可能与导航和查看页面的顺序无关。我假设它对内存消耗和性能进行了高度优化,因此它要求使用视图控制器来满足这些目标。甚至println(pageContentViewController.imageName)
输出的图像与显示的图像不同。感谢您的解释。如果是这样的话,你介意建议我如何显示当前的索引吗?实际上我刚刚试过。但我的方法从未被调用:func pageViewController(pageViewController:UIPageViewController,didfinitishanimating finished:Bool,previousViewControllers:[AnyObject],transitionCompleted completed:Bool){println(“test call”)}
它适合我。你确定你的页面视图控制器上的delegate
属性设置为实现该方法的任何对象吗?我不太确定。如何为页面视图控制器设置委托?如果您使用的是同一个“基于页面的应用程序”模板,请查找数据源的设置位置:self.pageViewController!。dataSource=self.modelController
。委托就是这样的另一个对象(它甚至可以是与数据源相同的对象),它符合UIPageViewControllerDelegate
协议,并且您以相同的方式分配它:self.pageViewController!。delegate=self.modelController
。
func viewControllerAtIndex(index : Int) -> UIViewController? {
if((self.pageTitles.count == 0) || (index >= self.pageTitles.count)) {
return nil
}
let pageContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageContentViewController") as! PageContentViewController
pageContentViewController.imageName = self.images[index]
pageContentViewController.titleText = self.pageTitles[index]
pageContentViewController.pageIndex = index
println(pageContentViewController.imageName)
if index == 3 { // show start button once user reaches the last screen (index = 3)
startBtn.hidden = false
} else {
startBtn.hidden = true
}
return pageContentViewController
}