所以我使用一些Storyboard References来引入一些结构。现在我试图从代码中更改ViewController,但我无法使用来自不同Storyboard的ViewController。我的代码目前看起来像这样:
func showCommunityDetail(){
let storyBoard : UIStoryboard = UIStoryboard(name: "community", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "communityDetail") as! CommunityViewController
self.present(nextViewController, animated:true, completion:nil)
}
社区故事板包含communityDetail控制器,但执行此代码时显示的视图位于不同的故事板中。
如何在不同的故事板之间展示?
更新
我将代码更新为以下行:
let detailViewController = UIStoryboard(name: "community", bundle: nil).instantiateViewController(withIdentifier: "communityDetail");
但是,现在我收到一个新错误:whose view is not in the window hierarchy!
答案 0 :(得分:1)
在不同的故事板中显示视图控制器。
1)确保"初始视图控制器"为每个故事板中的条目ViewController设置了属性。
介绍它:
let vcToPresent = UIStoryboard(name: "StoryboardName", bundle: nil).instantiateInitialViewController();
// Ensure its of the type that you want, so that you can pass info to it
guard let specialVC = vcToPresent as? SpecialViewController else {
return
}
specialVC.someProperty = somePropertyToPass
self.present(specialVC, animated: true, completion: nil)
编辑:
要实例化一个不同的viewcontroller(除了标记为initial的那个),可以使用以下方法:
func instantiateViewController(withIdentifier identifier: String) -> UIViewController
链接到文档:https://developer.apple.com/reference/uikit/uistoryboard/1616214-instantiateviewcontroller
请注意,您必须在界面构建器上为要使用此方法的视图控件设置标识符。
答案 1 :(得分:0)
刚刚处理了你要求的要求,它在swift 2.2中。尝试一下就可以这样工作。
var nextViewController : CommunityViewController!
func showCommunityDetail() {
let mainStoryboard = UIStoryboard(name: "community", bundle: nil)
nextViewController = mainStoryboard.instantiateViewControllerWithIdentifier("communityDetail") as! CommunityViewController
addChildViewController(nextViewController)
// Optionally you can change the frame of the view controller to be added
nextViewController.view.frame = CGRect(x: 0, y: 0 , width: view.frame.width, height: view.frame.height)
view.addSubview(nextViewController.view)
nextViewController.didMoveToParentViewController(self)
}