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在延迟后返回。