关于ios:放松segue没有正确过渡

Unwind segue not transitioning properly

我使用一个push segue从根视图控制器中的uisearchcontroller转换到第二个视图控制器。当我尝试使用放卷segue方法从第二个视图控制器转换回根视图控制器时,除非两次按下连接到放卷方法的按钮,否则我的应用程序不会转换。两次都调用Unwind方法,但是转换只在第二次调用时发生。我不知道为什么会这样。感谢您的帮助。谢谢!

放卷分段法

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

我如何联系我的世格

enter image description here

解开分段

enter image description here


虽然你所做的是允许的,但这似乎违背了最佳实践。在这种情况下,显示视图控制器(uiTableViewController)的功能通常与模式视图关联,即输入信息,然后用右上角的按钮将其取消。在Push Segue中,您将免费获得左上角的Back(后退)按钮,这将使您能够在不编写额外代码的情况下将视图控制器从堆栈中弹出。

下面是另一个堆栈溢出问题,描述:
在故事板中,modal和push segue之间的区别是什么?

要具体回答您的问题,以下是几个有帮助的链接:[self.navigationController popViewControllerAnimated:YES];可能是你想要的。
从导航控制器中取消推送视图
如何在iPhone/iPad中关闭PushViewController?


下面是我最终实现这一目标的方法:

在我的FirstViewController(我要退出的VC)中:

这是我的放松方法。

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

然后我在故事板上给了我的放松塞格标识符"放松"。

在我的第二个视图控制器(我要退出的VC)中:

1
2
3
4
5
6
7
8
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier =="unwind" {
        if let destination = segue.destinationViewController as? VocabListViewController {
            destination.saveWordToCoreData(word)
            destination.tableView.reloadData()
        }
    }
}

我负责用第二个视图控制器的PrepareForSegue方法传递数据。感谢@lory huz的建议。我终于明白你的意思了。

没有任何错误!