放松segue没有正确过渡

时间:2015-06-23 21:38:50

标签: ios swift uinavigationcontroller uistoryboardsegue

我使用push segue从位于我的根视图控制器中的uisearchcontroller转换到第二个视图控制器。当我尝试使用展开segue方法从我的第二个视图控制器转换回根视图控制器时,除非按下连接到展开方法的按钮两次,否则我的应用程序不会转换。 unwind方法被调用两次,但转换仅在第二次调用时发生。我不知道为什么会这样。任何帮助表示赞赏。谢谢!

展开segue方法

@IBAction func saveWordAndDefinition(segue:UIStoryboardSegue) {
    self.searchController.active = false
    if let definitionViewController = segue.sourceViewController as? DefinitionViewController {
        saveWordToCoreData(definitionViewController.word)
    }
    tableView.reloadData()
}

我如何关联我的segue

enter image description here

展开赛道

enter image description here

2 个答案:

答案 0 :(得分:1)

虽然您正在做的事情是允许的,但这似乎违背了最佳做法。在这种情况下,呈现视图控制器,UITableViewController,输入信息,然后通过右上角的按钮解除它的功能通常与模态视图相关联。在push segue中,您可以免费获得左上角的后退按钮,这样您就可以在不编写额外代码的情况下将视图控制器弹出堆栈。

此处有另一个Stack Overflow问题描述:
What is the difference between Modal and Push segue in Storyboards?

要具体回答您的问题,以下是一些应该有用的链接: [self.navigationController popViewControllerAnimated:YES];可能是您正在寻找的内容。
Dismiss pushed view from within Navigation Controller
How can I dismiss a pushViewController in iPhone/iPad?

答案 1 :(得分:0)

所以这就是我最终如何使用它的方法:

在我的FirstViewController中(vc i' m展开):

这是我的unwind segue方法。

@IBAction func saveWordAndDefinition(segue:UIStoryboardSegue) {
    self.navigationController?.popViewControllerAnimated(false)
}

然后我放弃了标识符"放松"在故事板中。

在我的SecondViewController中(vc i' m展开):

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "unwind" {
        if let destination = segue.destinationViewController as? VocabListViewController {
            destination.saveWordToCoreData(word)
            destination.tableView.reloadData()
        }
    }
}

我负责在SecondViewController的prepareForSegue方法中传递数据。感谢@Lory Huz提出的建议。我终于找到了你的意思。

无任何错误地工作!