prepareforsegue()不执行(swift / storyboards)

时间:2015-11-30 23:33:04

标签: ios xcode swift storyboard

我正在制作一个小型测试应用程序,并使用Xcode中的“主细节”应用程序模板。我希望能够从详细视图发送数组到主视图。

我尝试使用prepareForSegue(),但问题是永远不会调用它。当我点击后退按钮(默认情况下已经存在(由Xcode生成))时,它根本不执行代码。

然而,

prepareForSegue()从主人到详细视图工作正常。

很抱歉,如果这个问题的答案很明显,但我对编程非常陌生,所以这让我有些困惑!

谢谢!

3 个答案:

答案 0 :(得分:2)

通过导航堆栈“返回”不是一个segue,因此它不会触发prepareForSegue或其他与segue相关的方法。通常,导航堆栈的设计使得主列表无需了解详细视图中发生的事情。

但是,如果需要,您可以使用viewWillAppear / viewWillDisappear方法找出用户何时从详细信息导航回主服务器。例如,如果您需要做的只是更新主列表以反映对详细信息项的更改,您可以使用所选索引路径(仍然选中)获得主viewWillAppear实现调用reloadRowsAtIndexPaths:withRowAnimation:从用户导航到详细视图时)。然后,您通常用于填充单元格的逻辑可以获取对该行所表示的对象所做的任何更改(以及您从中返回的详细视图)。

答案 1 :(得分:2)

当您返回时,您正在弹出导航堆栈,当您从详细信息移回主视图时,将不会调用prepareForSegue。要将数据从详细信息传递回master,您需要Unwind Segue。展开segue向后移动一个或多个segue以将用户返回到视图控制器的现有实例。您可以使用展开segue来实现反向导航。可以从这里学习更多细节 https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson8.html

答案 2 :(得分:0)

希望这对你有帮助......

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

    let cell = sender as UITableViewCell
    if segue.identifier == "xyz" {
        var tabBarVC: UITabBarController = segue.destinationViewController as UITabBarController
        var test: LessonsDetailsViewController = tabBarVC.viewControllers?.first as LessonsDetailsViewController
        var row = self.tableView.indexPathForCell(cell)?.row
        var dataObj = lessonsNSMObj[row!]
        test.managedObject = dataObj
    }
}