我如何使用我的动作并以编程方式转换到情节提要中定义的视图控制器?

How can I use my action and programmatically transition to a view controller as defined in the storyboard?

我有一个已发送的Action,如下:

    @IBAction func showSettings(sender: AnyObject) {
     let settingsPicker = SettingsViewController()
     settingsPicker.setDelegate(self)
     let navigationController = UINavigationController (rootViewController: settingsPicker)
     self.presentViewController(navigationController, animated: true, completion: nil)  
     }

该方法创建一个控制器,设置对委托的引用,并创建一个导航控制器。

所有这一切都有效,但是故事板中定义的小部件没有出现。 SettingsViewController 应该管理在故事板中定义的 ui。我想是因为我以编程方式创建它 none 出现的小部件。 SettingsViewController 不会以编程方式创建小部件,它们是在故事板中以声明方式定义的。

如果我link(在故事板中)两个控制器有一个 segue,那么小部件就会出现,但我的动作没有被使用。

如何使用我的动作并呈现故事板中定义的视图控制器/ui?

当您在 UIViewController 之间创建一个 segue 时,您应该定义一个标识符,例如:"settingsSegue".

在您的代码中,您可以通过使用标识符调用 segue 来执行该 segue:

@IBAction func showSetting(sender: AnyObject) {
    performSegueWithIdentifier("settingsSegue", sender: nil)
}

要设置 SettingsViewController,您应该执行以下操作:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){

    if let settingsController = segue.destinationViewController as? SettingsViewController {
        settingsController.delegate = self
    }
}

Interacting with Storyboard and Segues

如果您想通过代码调用 segue,请参阅 Laffen 的回答。

如果您想创建一个在故事板中定义的视图控制器,然后以编程方式显示它,请使用 instantiateViewControllerWithIdentifier 创建一个新的视图控制器实例,然后根据需要将其显示到屏幕上(当前模态,将其推送到您的导航堆栈,或任何您想做的事情。)