如何在快速关闭呈现的控制器后推送控制器?
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 – 在设置关键窗口或关闭并立即呈现另一个视图控制器后快速呈现视图控制器时出现故障
链 UIViewControllers 推送和弹出动画与 UINavigationController 关闭/呈现模式视图?