从另一个导航控制器弹出视图控制器到另一个视图控制器

Posted

技术标签:

【中文标题】从另一个导航控制器弹出视图控制器到另一个视图控制器【英文标题】:Pop viewcontroller to another viewcontroller from another navigation Controller 【发布时间】:2018-11-16 15:49:13 【问题描述】:

NC / VC1 - 模态呈现- NC2 / VC2(嵌入) - VC3 弹出到 VC1

我正在尝试将当前视图控制器从另一个导航控制器弹出到第一个视图控制器。

我找不到方法。有人知道怎么实现吗?

【问题讨论】:

你弹出到 VC1 导航控制器而不是 VC1 使用展开转场。在 VC 1 中声明 unwind segue 在 VC 3 创建 unwind segue 并分配 id 到 segue 并执行它。 @Junaid 你能告诉我怎么做吗? 好的,我会告诉你 找到一个简单的解决方案只需调用这个方法 self.dismiss(animated: true, completion: nil) 【参考方案1】:

首先在VC1类中声明这个方法

class VC1: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    

    @IBAction func unwindtoVC1(segue: UIStoryboardSegue) 

    


然后查看图片以创建展开转场

之后在您的 VC3 课程中

class VC3: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    


    @IBAction func didCloseTap(_ sender: Any) 
        self.performSegue(withIdentifier: "segueToVC1", sender: nil)

    


【讨论】:

【参考方案2】:

我们需要更多关于视图控制器层次结构以及导航是如何完成的详细信息。

请注意,除非另一个视图控制器(您想在弹出当前视图控制器后显示)在层次结构中不是当前的 - 否则会出现问题。

我建议使用协调器对象(它不是视图控制器,继承自 NSObject)。让它决定应该弹出什么视图控制器以及接下来要显示什么。

协调器需要引用 App Delegate 的 window 属性,以便根据需要设置其 rootViewController 属性。所有视图控制器还必须委托给协调器以通知它关闭/添加/保存事件等。

观看此演示文稿https://vimeo.com/144116310 并注意这是一种比您在 Apple 文档中找到的更高级的模式。这个想法是视图控制器不应该呈现其他视图控制器或知道其他视图控制器的存在......除非它是一个容器视图控制器,例如 UINavigationController、UITabBarController、这些的子类或自定义的。

【讨论】:

以上是关于从另一个导航控制器弹出视图控制器到另一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式导航到另一个故事板上的导航控制器和标签栏控制器内的视图控制器

按下后退按钮后,从另一个视图控制器更改按钮

如何从另一个视图控制器将值插入 UITableViewCell

如何在使用 UIpageviewcontroller 导航页面时从另一个视图控制器自动更新视图控制器上的标签

从 UIAlertView 弹出视图警报

在屏幕之间导航