use*_*133 24 iphone objective-c ios6
在过去的几天里,我一直在努力解决这个问题,经过这个杂耍之后,我发现我只需要数据源方法的当前索引来更新当前可见的页码
我有这个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];
[self displaycurrentIndex:currentIndex];
//self.pageControl.currentPage = currentIndex;
}
Run Code Online (Sandbox Code Playgroud)
我怎么能纠正这个?
Wai*_*ain 26
看起来您应该能够获得当前索引:
ContentViewController *viewController = [self.pageViewController.viewControllers lastObject];
currentIndex = [modelArray indexOfObject:[viewController page]];
Run Code Online (Sandbox Code Playgroud)
sof*_*789 19
对于swift:
func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool){
let pageContentViewController = pageViewController.viewControllers![0] as! ViewController
let index = pageContentViewController.pageIndex
}
Run Code Online (Sandbox Code Playgroud)
如果您实现ModelController(如Apple示例中所示),请使用它的方法indexOfViewController
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed {
myDataViewController *currentView = [pageViewController.viewControllers objectAtIndex:0];
NSInteger currentIndex = [_modelController indexOfViewController:currentView];
[self displayPageNumber:currentIndex];
}
Run Code Online (Sandbox Code Playgroud)
我在 pageViewController 上面临同样的问题,每次我刷我的 pageViewController 时,它都会调用我的委托两次,但找不到问题。而且我的数组是动态的,所以我想要来自 pageController 的正确索引值。首先设置 pageViewController 的委托。像这样 :-
self.pageViewController.delegate = self;
Run Code Online (Sandbox Code Playgroud)
然后将此委托方法添加到您的类中
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
if (completed) {
NSInteger currentIndex = ((PageContentViewController *)self.pageViewController.viewControllers.firstObject).pageIndex;
NSLog(@"%ld",(long)currentIndex);
}
}
Run Code Online (Sandbox Code Playgroud)
PageContentViewController 是您在其中显示 pageViewController 数据的类。
运行您的项目,如果一切正常,您将获得索引值。 PageIndex是用于获取当前索引的整数值。希望它会帮助你。
谢谢
曼迪普·辛格
我的方法很简单:
当页面(控制器)被实例化时,我传入页面索引,此时该索引是已知的。
然后在下面的委托调用中,如果转换完成,我将获取当前显示的控制器并将其转换为我的自定义页面类,然后再使用关联的页面索引获取和更新 currentPage。
为了简单起见,我将数据源和委托设置为WalkThroughController
嵌入页面视图控制器。
extension WalkThroughController: UIPageViewControllerDelegate {
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
guard finished, let currentPageController = pageViewController.viewControllers?.last as? WalkThroughPageViewController else {
return
}
self.currentPage = currentPageController.pageIndex
}
}
Run Code Online (Sandbox Code Playgroud)
要点是在数据源中创建页面时设置页面的页面索引。通过这种方法,以后检索它非常简单。