使用Storyboard引用时如何呈现新的UIViewController

时间:2017-05-15 08:11:25

标签: ios swift uiviewcontroller uistoryboard

所以我使用一些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!

2 个答案:

答案 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)
}