- 我有三个 ViewControllers - V1 V2 和 V3。
- 一个按钮点击V1,ViewController V2显示动画 水平翻转。
现在在 V2 中点击一个按钮,ViewController 应该被关闭 回到 V1 并显示 ViewController V3。
我试过这段代码来实现这个功能。虽然它不起作用。请帮忙!
注意:V2 和 V3 在同一个 StoryBoard(开始)中。 V1 在不同的 Storyboard(主要)中。
var VC3 : ViewController3?
let mainStoryboard: UIStoryboard = UIStoryboard(name: "start",bundle: nil)
self.dismissViewControllerAnimated(false, completion: {
self.VC3 = (mainStoryboard.instantiateViewControllerWithIdentifier("ViewController3") as! ViewController3)
self.presentViewController(self.VC3!, animated: true, completion: nil)
})
更新 - 我收到此警告 尝试在 View 不在窗口层次结构中的 ViewController2 上呈现 ViewController3!
最佳答案
我复制了您的查询并创建了 3 个 View Controller :VC1、VC2 和 VC3。 我使用 Delegates 和 Segues 实现了这一点。 Storyboard Setup .
VC1.Swift:
class VC1: UIViewController, VC2Delegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
func showVC3() {
self.performSegueWithIdentifier("VC1ToVC3", sender: nil)
}
// MARK: - Navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "VC1ToVC2" {
if let destVC = segue.destinationViewController as? VC2 {
destVC.delegate = self
}
}
}
}
VC2.Swift:
protocol VC2Delegate {
func showVC3()
}
class VC2: UIViewController {
var delegate:VC2Delegate?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func actBack(){
self.dismissViewControllerAnimated(true, completion: nil)
if let _ = delegate {
delegate?.showVC3()
}
}
}
关于ios - 关闭一个 View Controller 并显示另一个 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39823934/