Swift尝试以模态形式呈现一个活动控制器[Current view controller],即使所呈现的控制器是另一个

Ren*_*ola 0 ios swift

我已经读过一些答案,例如解雇当前的ViewController,但是我的情况有所不同,因为我要介绍另一个ViewController。

这段代码向视图控制器提供了其导航控制器,尽管我无法访问它的属性:

@IBAction func didTouchAddFriend(_ sender: UIButton) {
DispatchQueue.main.async {

    let storyBoard = UIStoryboard(name: "CustomContact", bundle: nil)
        let customContactVC = storyBoard.instantiateViewController(withIdentifier: "CustomContact")

}
}
Run Code Online (Sandbox Code Playgroud)

虽然这不起作用

@IBAction func didTouchAddFriend(_ sender: UIButton) {
    DispatchQueue.main.async {

        let navigation = UIStoryboard.init(name: "CustomContact", bundle: nil).instantiateInitialViewController() as! UINavigationController
        let pickerUserVC = navigation.viewControllers.first as! CustomContactsViewController
        self.present(pickerUserVC, animated: true, completion: nil)

    }
}
Run Code Online (Sandbox Code Playgroud)

我还有一个名为CustomContact.storyboard的故事板,其中包含一个CustomContactsViewController

当我单击didTouchAddFriend时,它仅显示以下错误:

'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller <Main.MainViewController: 0x7ff29f06ac00>.'
Run Code Online (Sandbox Code Playgroud)

当我打印pickerUserVC的值时,我无法理解错误cos,它显示了正确的视图控制器:

<Main.CustomContactsViewController: 0x7fd1b7922400>
Run Code Online (Sandbox Code Playgroud)

MainViewController是实现didTouchAddFriend函数的当前视图控制器

And*_*jen 5

您应该展示导航控制器(它托管CustomContactsViewController根视图控制器)。

而且,您可以跳过Dispatch调用,因为我们位于已经在主线程中运行的@IBAction中:

@IBAction func didTouchAddFriend(_ sender: UIButton) {
    let navigation = UIStoryboard.init(name: "CustomContact", bundle: nil).instantiateInitialViewController() as! UINavigationController
    let pickerUserVC = navigation.viewControllers.first as! CustomContactsViewController
    self.present(navigation, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)