Get Page View to pop off on last screen

一个人想着一个人 提交于 2019-12-12 01:49:15

问题


I have a functional tutorial intro implemented into my app, but i just can't seem to get the page view to pop off when i swipe the screen for the last time. I thought dismissViewControllerAnimated:completion: would work

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger index = ((PageContentViewController*) viewController).pageIndex;

    if (index == NSNotFound) {
        return nil;
    }

    index++;
    if (index == [self.pageTitles count]) {
        [self.pageViewController dismissViewControllerAnimated:YES completion:nil];
    }
    return [self viewControllerAtIndex:index];
}

I figured out how to get it to go away, but it goes away right when it gets to the last page. I want it to show the last page and then go away when the user swipes right again on that last page.

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger index = ((PageContentViewController*) viewController).pageIndex;

    if (index == NSNotFound) {
        return nil;
    }

    index++;
    if (index == [self.pageTitles count]) {
        [self.pageViewController.view removeFromSuperview];
    }
    return [self viewControllerAtIndex:index];
}

回答1:


Page View Controller is your main viewcontrollers child view controller, this is the correct way to remove childViewController:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger index = ((PageContentViewController*) viewController).pageIndex;

    if (index == NSNotFound) {
        return nil;
    }

    index++;

    if (index == [self.pageTitles count]) {
        [pageViewController willMoveToParentViewController:nil];  // 1
        [pageViewController.view removeFromSuperview];            // 2
        [pageViewController removeFromParentViewController];      // 3   
    }

    return [self viewControllerAtIndex:index];
}



回答2:


Also encountered the same issue and my solution was to add an extra page that was clear with the following code:

/// the index of the currently displayed page
fileprivate var currentIndex: Int = 0


func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {

    // didFinishAnimating gets called before viewControllerAfter, which means `currentIndex` will be 1 page behind, hence subtract 2 instead of 1
    if currentIndex == myViewControllers.count - 2 {
        //self.dismiss(animated: true, completion: nil)
        //.... dismiss pages here
    }
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {

    guard let viewControllerIndex = myViewControllers.index(of: viewController) else { return nil }
    let previousIndex = viewControllerIndex - 1

    // track current page index
    currentIndex = Int(viewControllerIndex)

    // ..
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {

    guard let viewControllerIndex = myViewControllers.index(of: viewController) else { return nil }

    let nextIndex = viewControllerIndex + 1

    // track page index
    currentIndex = Int(viewControllerIndex)

    // get next page
    if nextIndex < myViewControllers.count {
        return myViewControllers[nextIndex]
    }

    return nil
}

didFinishAnimating is called before viewControllerAfter. This means the value for currentIndex will be for the previous page when didFinishAnimating is called. Hence why I subtract 2 (instead of 1)



来源:https://stackoverflow.com/questions/27452673/get-page-view-to-pop-off-on-last-screen

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!