segue 关闭时执行操作

Posted

技术标签:

【中文标题】segue 关闭时执行操作【英文标题】:Perform action when segue is closed 【发布时间】:2018-01-02 12:07:06 【问题描述】:

我有一个 ViewController,我在其中调用 segue 到另一个 ViewController:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        if segue.identifier == blogSegueIdentifier 
            let destination = segue.destination as! Reply
            let path = tableView.indexPathForSelectedRow
            let cell = tableView.cellForRow(at: path!) as! QuestionsTabCell
            destination.blogName = String(cell.labelQues!.tag)
        
    

在打开的 segue (ViewController) 中有一个 UITextView 和一个 UINavigationBar 中的发送按钮。因此,用户输入 textView 并将其发送到服务器,点击按钮,在此打开的 segue (ViewController) 关闭并且用户返回到第一个 ViewController 之后。当用户关闭segue而不使用viewWillAppear时如何在第一个ViewController中调用方法?

【问题讨论】:

使用展开转场。 How to pass data from modal view controller back when dismissed的可能重复 @chengsam 请把它写成答案,非常感谢! 【参考方案1】:

你好@Mr Jo 你可以使用 unwind segue 来达到这个目的。

在你的第一个 viewController 中声明一个方法 Like :-

//MARK: - - Unwind Segue 从选择的类别中获取数据 @IBAction func unwindToAssignCatController(segue: UIStoryboardSegue) //从selectcategory类中取回数据 如果 segue.identifier == "segueIdentifier" 让控制器 = segue.source 为!回复 // 从第二个 viewController 获取你的值并在第一个 viewController 中使用

之后你必须选择你的第二个 ViewController

1:右键Controller并拖动退出然后会出现下面的方法 2:选择它并为其分配一个标识符。 3:然后在具有相同标识符的第二个 viewController 中对您想要的那个动作执行 segue。

【讨论】:

【参考方案2】:

如果你有 NavigationController,试试:(Objective-C)

FirstVC* firstVC = self.navigationController.viewControllers[self.navigationController.viewControllers.count
- 2]

导航堆栈中一系列 viewController 中的最后一个

如果您在没有 NavigationController 的情况下打开第二个 viewController,您可以获得第一个 viewController 的实例,如下所示:

FirstVC* firstVC = self.presentingViewController

请注意,在转换完成后,呈现 VC 的实例将在此属性中可用,例如在 viewDidAppear

【讨论】:

以上是关于segue 关闭时执行操作的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式定义和执行 segue

在 Xcode 中执行 segue 后如何关闭视图控制器?

关闭模态视图控制器,然后执行 segue

如何在触发退出 segue 之前执行操作?

以编程方式从 UIView 执行 Segue

以编程方式从 Xib 执行 Segue