如何在快速关闭呈现的控制器后推送控制器?

Posted

技术标签:

【中文标题】如何在快速关闭呈现的控制器后推送控制器?【英文标题】:How to push controller after dismiss presented controller in swift? 【发布时间】:2020-02-11 14:27:55 【问题描述】:

嘿,我在主控制器中显示一个控制器 (A) 的演示样式(不是推送),我想在关闭此 (A) 控制器后点击按钮并按下另一个控制器 (B),这种情况发生在主控制器中.我正在为这种情况使用协议。有什么想法吗?代码如下。`

//this is dismiss button action

   var segueDelegate: segueFromController?

   @objc func dismissController() 

    self.dismiss(animated: true) 
        self.segueDelegate?.segueFromController()
    

//and this one is protocol function in main controller


    func segueFromController() 

     let contProfile = ContViewController(collectionViewLayout: UICollectionViewFlowLayout())

           navigationController?.pushViewController(contProfile, animated: true)



// and I am making "self" this protocol in main controller's didload

  let aCont = AController()

  override func viewDidLoad() 
            super.viewDidLoad()

            AController.segueDelegate = self
 

 // protocol

protocol segueFromController  
  func segueFromController()  
  

// this is presenting (A) controller code in main page

func openController() 
            let preController = AController()
        preController.modalPresentationStyle = .fullScreen
        self.present(preController, animated: true, completion: nil)


【问题讨论】:

你遇到了什么问题? 当我点击关闭按钮时,它正在关闭控制器并打开主控制器,但不推(B)控制器 segueFromController 函数正在调用? 没有。这就是问题 【参考方案1】:

首先你需要让这个 segueDelegate 变弱

protocol segueFromController : class 
func segueFromController()

weak var segueDelegate: segueFromController?

func openController() 
            let preController = AController()
         preController.segueDelegate = self
        preController.modalPresentationStyle = .fullScreen
        self.present(preController, animated: true, completion: nil)


尝试在没有动画的情况下关闭

self.dismiss(animated: false) 
             self.segueDelegate?.segueFromController()
        

【讨论】:

这给出了这个错误:'weak' must not be applied to non-class-bound 'segueFromController';考虑添加具有类绑定的协议一致性 或分享您的测试项目 如何共享测试项目。抱歉,我对 swift 不熟悉 wetransfer.com 通过本网站 我在主页打开(控制器)..在编辑中添加

以上是关于如何在快速关闭呈现的控制器后推送控制器?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 – 在设置关键窗口或关闭并立即呈现另一个视图控制器后快速呈现视图控制器时出现故障

如何推送查看控制器表单呈现的 xib

ios:如何关闭模态视图控制器,然后弹出推送的视图控制器

在呈现模态视图控制器后推送导航控制器

链 UIViewControllers 推送和弹出动画与 UINavigationController 关闭/呈现模式视图?

无法推送或呈现视图控制器