Ios 在集合的最后一个视图中关闭PopViewController

Ios 在集合的最后一个视图中关闭PopViewController,ios,uipageviewcontroller,Ios,Uipageviewcontroller,我开发了一个应用程序,它有一个带有开始按钮的第一视图。当我按下按钮时,我启动PageViewController。我需要的是,在收藏的最后一个项目中,5秒钟后,使用开始按钮返回到第一个视图。我尝试了使用self.dismissViewControllerAnimated,但没有成功 当我点击开始按钮时,我调用带有标识符的nib: self.performSegueWithIdentifier("goToViewController", sender: nil) 此nib有一个自定义类,命名为

我开发了一个应用程序,它有一个带有开始按钮的第一视图。当我按下按钮时,我启动
PageViewController
。我需要的是,在收藏的最后一个项目中,5秒钟后,使用开始按钮返回到第一个视图。我尝试了使用self.dismissViewControllerAnimated,但没有成功

当我点击开始按钮时,我调用带有标识符的nib:

 self.performSegueWithIdentifier("goToViewController", sender: nil)
此nib有一个自定义类,命名为:

在这个类中,我开发了
PageViewController
的行为,其中我将
PageViewController
内容配置为故事板ID:

import UIKit
import AVFoundation

class PageViewController: UIViewController, UIPageViewControllerDataSource {

    var audioPagePlayer = AVAudioPlayer()
    var error: NSError?
    var audioPage = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Turn page", ofType: "mp3")!)
    var contentPageRestorationIDs = [String]()
    var pageViewController = UIPageViewController()

    override func viewDidLoad() {
        super.viewDidLoad()

        audioPagePlayer = AVAudioPlayer(contentsOfURL: audioPage, error: &error)

        contentPageRestorationIDs = ["FirstView", "SecondView", "ThirdView", "FourthView", "FiveView", "SixView", "SevenView", "EightView", "NineView", "TenView", "ElevenView", "TwelveView", "ThirteenView", "FourteenView"]
        // Do any additional setup after loading the view, typically from a nib.

        pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as UIPageViewController
        pageViewController.dataSource = self

        var startingController: UIViewController = self.viewControllerAtIndex(0)!

        pageViewController.setViewControllers([startingController], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)

        self.addChildViewController(self.pageViewController)
        self.view.addSubview(self.pageViewController.view)
        self.pageViewController.didMoveToParentViewController(self)


    }

    func goToPreviousContentViewController(){

        var currentViewController: AnyObject = self.pageViewController.viewControllers[0]
        var vcRestorationID = currentViewController.restorationIdentifier
        var index = find(contentPageRestorationIDs, vcRestorationID!!)

        var previousViewController: UIViewController = self.viewControllerAtIndex(index! - 1)!

        pageViewController.setViewControllers([previousViewController], direction: UIPageViewControllerNavigationDirection.Reverse, animated: false, completion: nil)



    }

    func goToNextContentViewController(){

        var currentViewController: AnyObject = self.pageViewController.viewControllers[0]
        var vcRestorationID = currentViewController.restorationIdentifier
        var index = find(contentPageRestorationIDs, vcRestorationID!!)

        var nextViewController: UIViewController = self.viewControllerAtIndex(index! - 1)!

        pageViewController.setViewControllers([nextViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)



    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> (UIViewController?){
        var vcRestorationID = viewController.restorationIdentifier
        var index = find(contentPageRestorationIDs, vcRestorationID!)

        if(index == 0){
            return nil
        }

        audioPagePlayer.prepareToPlay()
        audioPagePlayer.play()


        return viewControllerAtIndex(index! - 1)
    }

    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> (UIViewController?){
        var vcRestorationID = viewController.restorationIdentifier
        var index = find(contentPageRestorationIDs, vcRestorationID!)

        if(index == contentPageRestorationIDs.count - 1){
            return nil
        }

        var vc = viewController as BaseContentViewController

        if(vc.goNext == true){

            audioPagePlayer.prepareToPlay()
            audioPagePlayer.play()

            return viewControllerAtIndex(index! + 1)

        }
        return nil
    }


    func presentationCountForPageViewController(pageViewController: UIPageViewController) -> (Int){
        return self.contentPageRestorationIDs.count
    }

    func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> (Int){
        return 0
    }


    func viewControllerAtIndex(index: Int)-> (BaseContentViewController!) {

        if(index >= contentPageRestorationIDs.count){
            return nil
        }

        var storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle(forClass: self.dynamicType))

        var contentViewController: BaseContentViewController = storyboard.instantiateViewControllerWithIdentifier(self.contentPageRestorationIDs[index]) as BaseContentViewController

        contentViewController.rootViewController = self

        contentViewController.loadView()

        return contentViewController

    }
}
每个nib的视图控制器从自定义类扩展而来
BaseContentViewController

import UIKit

class BaseContentViewController: UIViewController {

    var rootViewController: PageViewController = PageViewController()
    var goNext = Bool()


    override func viewDidLoad() {
        super.viewDidLoad()

        println("View Did Load Form Base Content View Controller")
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }



}

当我在具有de Storyboard ID“FourteenView”的视图中时,5秒后,我需要返回到页面视图控制器之前的视图

您可以像这样延迟使用
性能选择器

[self performSelector:@selector(functionToDismiss) withObject:nil afterDelay:5.0];

其中
functionToDismiss
应包含关闭当前视图控制器的代码

如何显示页面视图控制器?如果要推它,则必须将其弹出,如果要将其显示为模型,则使用dismissViewControllerAnimated

好的

解决方案放在一个函数中,该函数编码延迟后的调用:

func finish(){

    self.rootViewController.navigationController?.popViewControllerAnimated(true)

}

好的,但是在哪里可以实现这些功能,在PageViewController中还是在最后一个视图中??当您说
集合中的最后一项时
您的确切意思是什么。。。哪个收藏??TableView或CollectionView??当我按下开始按钮时,我调用标识符为“goToPageViewController”的情节提要。故事板中的这个nib有一个类似PageViewController的类,并使用PageViewControllerView加载每个ViewControllerPlz,在按下按钮后输入显示视图控制器的代码。是的,您使用标识符获得了一个视图控制器,但您如何显示控制器?使用下面给出的方法—(iAction)按钮按下:(id)发送方{MyCustomViewController*vc=[self.storyboard instanceeviewcontrollerwhiteIdentifier:@“MyViewController”];[self-presentViewController:vc-animated:YES-completion:nil];}然后使用dismissViewControllerAnimated在延迟后返回。