performSegueWithIdentifier不能在不同的ViewController中工作

时间:2016-04-08 20:19:54

标签: ios swift segue

我有以下故事板:Main Storyboard

其中,一些自定义视图控制器以编程方式嵌入到滚动视图中。在其中一个中,有一个按钮,应该触发一个segue来显示"嘿"屏幕。

然后我编写了以下代码:

@IBAction func addNewDateButtonDidTouched(sender :AnyObject) {
    let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let storyboardInit = mainStoryboard.instantiateViewControllerWithIdentifier("mainview")
    storyboardInit.performSegueWithIdentifier("showNewDate", sender: self)
}

这个@IBAction似乎重新加载初始视图控制器并执行segue correclty(Xcode不会返回任何错误)。但是"嘿"屏幕无法显示且viewDidLoad()无法加载。

任何提示?

3 个答案:

答案 0 :(得分:2)

而不是打电话

storyboardInit.performSegueWithIdentifier("showNewDate", sender: self)

尝试

self.performSegueWithIdentifier("showNewDate", sender: self)

答案 1 :(得分:0)

代码中的storyboardInit将实例化具有标识符“UIViewController”的mainview。 但是,当您要求控制器执行segue时,此UIViewController尚未添加到屏幕上。

所以,我不会这样做。我要做的是,切换到嘿屏幕是:

  1. 从当前控制器创建一个segue,并在代码中执行此操作:self.performSegueWithIdentifier
  2. 像这样实例化嘿控制器:instantiateViewControllerWithIdentifier,然后执行self.presentViewController
  3. 因此,要转换到新控制器,必须从当前控制器开始。

答案 2 :(得分:0)

如果我正确理解你的viewcontroller层次结构......

因为包含触发segue按钮的viewcontroller是viewcontroller的childviewcontroller,它在storyboard中设置了segue,我认为你必须调用presentingViewController?.performSegueWithIdentifier("showNewDate", sender: self)