Ron*_*ayo 12 uiviewcontroller ios swift
嗨,我正在尝试提供一个viewcontroller并解除我当前的模态视图,但这段代码不起作用
self.dismissViewControllerAnimated(true, completion: {
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("OrderViewController")
self.presentViewController(vc!, animated: true, completion: nil)
})
Run Code Online (Sandbox Code Playgroud)
反之亦然,在presentviewcontroller的完成块上也不起作用
编辑:更换vc!自我
San*_*mar 17
你必须获得呈现self(当前ViewController)的viewController.如果该视图控制器是rootViewController,您可以使用如下,如果不是该查询它基于您查看控制器层次结构.
if let vc3 = self.storyboard?.instantiateViewController(withIdentifier: "vc3") as? ViewController3 {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController!.present(vc3, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
你不能这样做,因为当UIViewController A调用UIViewController B并且第一个控制器被解除时,两个控制器都是零.
你需要有一个UIViewController作为基础,在这种情况下,MainViewController是基础.您需要使用协议来调用控制器之间的导航.
你可以使用协议,比如说如下: -
在你的viewController设置协议中:
protocol FirstViewControllerProtocol {
func dismissViewController()
}
class FirstViewController: UIViewController {
var delegate:FirstViewControllerProtocol!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func goBack(sender: AnyObject) {
self.dismissViewControllerAnimated(true) {
self.delegate!.dismissViewController()
}
}
Run Code Online (Sandbox Code Playgroud)
现在在主视图控制器中
class MainViewController: UIViewController, FirstViewControllerProtocol {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func goToFirstViewController(sender: AnyObject) {
let viewController = self.storyboard?.instantiateViewControllerWithIdentifier(String(FirstViewController)) as! FirstViewController
viewController.delegate = self
self.presentViewController(viewController, animated: true, completion: nil)
}
//MARK: Protocol
func dismissViewController() {
if let viewController = self.storyboard?.instantiateViewControllerWithIdentifier(String(SecondViewController)){
self.presentViewController(viewController, animated: true, completion: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
我认为你的代码中有一个错误,'self'应该是呈现视图控制器来呈现'vc',而不是'vc'它自己
你的代码
self.dismissViewControllerAnimated(true, completion: {
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("OrderViewController")
vc!.presentViewController(vc!, animated: true, completion: nil)
})
Run Code Online (Sandbox Code Playgroud)
试试这个
self.dismissViewControllerAnimated(true, completion: {
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("OrderViewController")
self.presentViewController(vc!, animated: true, completion: nil)
})
Run Code Online (Sandbox Code Playgroud)
希望这是有帮助的
| 归档时间: |
|
| 查看次数: |
45836 次 |
| 最近记录: |