视图控制器不会立即关闭并呈现新的视图控制器
Posted
技术标签:
【中文标题】视图控制器不会立即关闭并呈现新的视图控制器【英文标题】:View Controller won't dismiss and present new view controller immediately 【发布时间】:2018-08-22 13:31:31 【问题描述】:我正在尝试在 QRCode 阅读器被关闭后呈现一个视图控制器,但是在执行此操作时,QRCode 阅读器视图控制器会再次出现。下面的代码 sn-p 显示了方法以及我如何关闭视图以及我如何尝试呈现下一个视图控制器。关于为什么当我尝试呈现不同的控制器时 QR 阅读器视图控制器不断呈现自己的任何想法。
func readerDidCancel(_ reader: QRCodeReaderViewController)
dismiss(animated: true, completion: nil)
present(ClockInOrOutViewController(), animated: true, completion: nil)
【问题讨论】:
你不能这样做。只有在前一个控制器完全关闭时,你才应该展示新的控制器。 @Vikky 你如何建议我这样做? 我认为 Konrad Piękoś 的回答会奏效。但它并没有像你评论的那样。所以现在你必须使用协议和代表来解决你的问题。看看medium.com/swift2go/…跨度> 【参考方案1】:您必须在dismiss
的completion 处理程序中调用present
。
func readerDidCancel(_ reader: QRCodeReaderViewController)
weak var presentingViewController = self.presentingViewController
self.dismiss(animated: true, completion:
presentingViewController?.present(ClockInOrOutViewController(), animated: true, completion: nil)
)
如果这不起作用,则意味着您的呈现视图控制器也已以某种方式被删除。 (解雇/弹出?)
【讨论】:
刚刚测试了您的解决方案,它给了我与我开始时相同的问题,并在调试器中抛出此错误'当其他视图控制器正在解散时,您不能呈现视图控制器,也不能在解散视图控制器时呈现。 你可以这样做:
func readerDidCancel(_ reader: QRCodeReaderViewController)
let presenting = self.presentingViewController
dismiss(animated: true, completion:
presenting?.present(ClockInOrOutViewController(), animated: true, completion: nil)
)
【讨论】:
您的解决方案仍然返回我,我仍然有同样的错误。 'func readerDidCancel(_ reader: QRCodeReaderViewController) dismiss(animated: true, completion: let presenting = UIApplication.sharedApplication().keyWindow?.rootViewController presenting?.present(ClockInOrOutViewController(), animated: true, completion: nil) )
以上是关于视图控制器不会立即关闭并呈现新的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章