我使用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
展开赛道
答案 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提出的建议。我终于找到了你的意思。
无任何错误地工作!