如何在其父UIViewController中了解UIPageViewController的当前状态

时间:2015-11-11 16:05:42

标签: ios xcode swift uipageviewcontroller

我有UIViewController,我在其中实例化UIPageViewController

有没有办法可以找出用户在父UIViewController上导航的页面?

示例:如下图所示;每次用户在UIPageViewController中滑动时,我想在幻灯片编号:X位置显示幻灯片编号。

我可以使用通知来实现此目的,但想知道是否有更好的方法可以做到这一点?

enter image description here

以下是我正在使用的一些示例代码: 在我的XYZViewController类

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        generateArrayOfViews()  //This would generate a array of view controllers to display within UIPageViewController


        let pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("pageViewController") as! UIPageViewController

        let firstController = arrayOfViewControllers[locations.count - 1]
        let startingViewControllers: Array = [firstController]

        pageViewController.dataSource = self

        pageViewController.setViewControllers(startingViewControllers, direction: .Forward, animated: true, completion: nil)

        pageViewController.view.frame = CGRectMake(0, 139, self.view.frame.width, self.view.frame.height)


        self.addChildViewController(pageViewController)
        self.view.insertSubview(pageViewController.view, atIndex: 1)
        pageViewController.didMoveToParentViewController(self)
    }

还实施了以下方法>

presentationCountForPageViewController and 
presentationIndexForPageViewController

试着知道我应该在XYZViewController上实现什么来了解pageViewController中的选定视图控制器。

2 个答案:

答案 0 :(得分:0)

您可以按如下方式传递可见页面的索引:

ContentViewController *viewController = [self.pageViewController.viewControllers lastObject];
currentIndex = [modelArray indexOfObject:[viewController page]];

答案 1 :(得分:0)

我通常使用这样的标识符创建一个NSArray:

self.pageIdentifiers = @[@"first",@"second"];

每个ViewController我实例化,都会设置一个pageIdentifier属性,具体取决于它在PageViewController中的位置。

然后我可以通过实现这个方法来了解ViewController的索引:

- (NSUInteger)indexOfViewController:(ViewController *)viewController {
      // Return the index of the given view controller.
      return [self.pageIdentifiers indexOfObject:viewController.pageIdentifier];
}

我也可以在实现这些方法时触发UI事件:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController