我有一个发送的动作,如下:
@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。我认为因为我以编程方式创建它没有出现任何小部件。 SettingsViewController不以编程方式创建小部件,在故事板中以声明方式定义。
如果我使用segue链接(在故事板中)两个控制器,则会显示小部件,但我的操作未被使用。
如何使用我的动作并呈现故事板中定义的视图控制器/ ui?
答案 0 :(得分:2)
当你在UIViewControllers之间创建一个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
}
}
答案 1 :(得分:1)
如果您想通过代码调用segue,请参阅Laffen的回答。
如果要创建在故事板中定义的视图控制器,然后以编程方式显示它,请使用instantiateViewControllerWithIdentifier
创建视图控制器的新实例,然后根据需要将其显示在屏幕上(以模态方式显示) ,将它推到你的导航堆栈,或任何你想做的事情。)