Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIPageViewController调用ViewControllerBeforReviewController和viewControllerAfterViewController_Ios - Fatal编程技术网

Ios UIPageViewController调用ViewControllerBeforReviewController和viewControllerAfterViewController

Ios UIPageViewController调用ViewControllerBeforReviewController和viewControllerAfterViewController,ios,Ios,我见过关于stackoverflow的类似问题(如和),但没有一个有明确的答案。我遵循了这一点,但为我想要显示的每个页面创建了一个单独的UIViewController文件,其中包含自己的.xib。在第一次滑动时,调用viewControllerBeforeViewController和viewControllerAfterViewController。本教程使用这两种方法来增加或减少pageIndex。因此,我最终看到的是pageIndex初始化为0,然后在调用viewControllerAf

我见过关于stackoverflow的类似问题(如和),但没有一个有明确的答案。我遵循了这一点,但为我想要显示的每个页面创建了一个单独的UIViewController文件,其中包含自己的.xib。在第一次滑动时,调用
viewControllerBeforeViewController
viewControllerAfterViewController
。本教程使用这两种方法来增加或减少
pageIndex
。因此,我最终看到的是
pageIndex
初始化为0,然后在调用
viewControllerAfterViewController
时设置为1,然后在调用
viewControllerBeforeViewController
时立即设置为0。最终,这会导致页面显示不正确

这是我处理这件事的方法

在每个页面视图控制器中,我创建了一个名为
index
readonly
属性,我在其实现中将该属性指定为相关值(例如,1、2或3)。 然后我做了这个:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSInteger pageIndex = 0;
    if ([viewController isKindOfClass:[MainMenuPage0ViewController class]]) {
        MainMenuPage0ViewController *mainMenuPage0ViewController = (MainMenuPage0ViewController *)viewController;
        pageIndex = mainMenuPage0ViewController.index;
        pageIndex--;
    } else if ([viewController isKindOfClass:[MainMenuPage1ViewController class]]) {
        MainMenuPage1ViewController *mainMenuPage1ViewController = (MainMenuPage1ViewController *)viewController;
        pageIndex = mainMenuPage1ViewController.index;
        pageIndex--;
    } else if ([viewController isKindOfClass:[MainMenuPage2ViewController class]]) {
        MainMenuPage2ViewController *mainMenuPage2ViewController = (MainMenuPage2ViewController *)viewController;
        pageIndex = mainMenuPage2ViewController.index;
        pageIndex--;
    }

    if (pageIndex < 0) {
        return nil;
    }

    return [self viewControllerAtIndex:pageIndex];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSInteger pageIndex = 0;
    if ([viewController isKindOfClass:[MainMenuPage0ViewController class]]) {
        MainMenuPage0ViewController *mainMenuPage0ViewController = (MainMenuPage0ViewController *)viewController;
        pageIndex = mainMenuPage0ViewController.index;
        pageIndex++;
    } else if ([viewController isKindOfClass:[MainMenuPage1ViewController class]]) {
        MainMenuPage1ViewController *mainMenuPage1ViewController = (MainMenuPage1ViewController *)viewController;
        pageIndex = mainMenuPage1ViewController.index;
        pageIndex++;
    } else if ([viewController isKindOfClass:[MainMenuPage2ViewController class]]) {
        MainMenuPage2ViewController *mainMenuPage2ViewController = (MainMenuPage2ViewController *)viewController;
        pageIndex = mainMenuPage2ViewController.index;
        pageIndex++;
    }

    if (pageIndex == 3) {
        return nil;
    }

    return [self viewControllerAtIndex:pageIndex];
}
-(UIViewController*)页面视图控制器:(UIPageViewController*)页面视图控制器视图控制器预览控制器:(UIViewController*)视图控制器
{
NSInteger-pageIndex=0;
if([viewController是类的种类:[MainMenuPage0ViewController类]]){
MainMenuPage0ViewController*MainMenuPage0ViewController=(MainMenuPage0ViewController*)viewController;
pageIndex=mainMenuPage0ViewController.index;
页面索引--;
}else if([viewController是类的种类:[MainMenuPage1ViewController类]]){
MainMenuPage1ViewController*MainMenuPage1ViewController=(MainMenuPage1ViewController*)viewController;
pageIndex=mainMenuPage1ViewController.index;
页面索引--;
}else if([viewController是类的种类:[MainMenuPage2ViewController类]]){
MainMenuPage2ViewController*MainMenuPage2ViewController=(MainMenuPage2ViewController*)viewController;
pageIndex=mainMenuPage2ViewController.index;
页面索引--;
}
如果(页面索引<0){
返回零;
}
返回[self-viewControllerAtIndex:pageIndex];
}
-(UIViewController*)pageViewController:(UIPageViewController*)pageViewController viewControllerAfterViewController:(UIViewController*)viewController
{
NSInteger-pageIndex=0;
if([viewController是类的种类:[MainMenuPage0ViewController类]]){
MainMenuPage0ViewController*MainMenuPage0ViewController=(MainMenuPage0ViewController*)viewController;
pageIndex=mainMenuPage0ViewController.index;
pageIndex++;
}else if([viewController是类的种类:[MainMenuPage1ViewController类]]){
MainMenuPage1ViewController*MainMenuPage1ViewController=(MainMenuPage1ViewController*)viewController;
pageIndex=mainMenuPage1ViewController.index;
pageIndex++;
}else if([viewController是类的种类:[MainMenuPage2ViewController类]]){
MainMenuPage2ViewController*MainMenuPage2ViewController=(MainMenuPage2ViewController*)viewController;
pageIndex=mainMenuPage2ViewController.index;
pageIndex++;
}
如果(pageIndex==3){
返回零;
}
返回[self-viewControllerAtIndex:pageIndex];
}

我认为它可以像下面那样简化。没有必要有这么多的if/else。关键是要理解,我们只需要在新索引有效时计算它,即如果它介于0和页数之间:

func pageViewController(_ pageViewController: UIPageViewController,
                    viewControllerBefore viewController: UIViewController) -> UIViewController? {
    let pageContent: HomeCardVC = viewController as! HomeCardVC

    if var index = pageContent.pageIndex {
        if (index == 0 || index == NSNotFound) {
            return nil;
        }
        index = index - 1;

       return getViewControllerAtIndex(index: index)
    }
    return nil
}

func pageViewController(_ pageViewController: UIPageViewController,
                    viewControllerAfter viewController: UIViewController) ->   UIViewController? {
    let pageContent: HomeCardVC = viewController as! HomeCardVC

    if var index =  pageContent.pageIndex {
        if (index == NSNotFound || index == providersList.count - 1) {
            return nil
        }

        index = index + 1;
        return getViewControllerAtIndex(index: index)
    }
    return nil
}

我已经有几年没有在iOS上工作了,也没有时间学习swift。应该是相当直接可译的。