我有一个视图控制器,它显示另一个视图控制器,如下所示
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
let qrScannerViewController = QRScannerViewController()
qrScannerViewController.presentedBy = self
self.present(qrScannerViewController, animated:true, completion: nil)
// Do any additional setup after loading the view.
}qrScannerViewController (呈现视图控制器)然后调用
self.dismiss(animated:true, completion: nil)据我所知,它无论如何都会调用呈现视图控制器拒绝函数。
问题是,一旦提出的视图控制器被取消,呈现视图控制器的viewDidLoad再次被调用,这意味着视图控制器再次出现。
有什么办法绕过这件事吗?
即使我使用委托,呈现视图控制器的viewDidLoad也会再次被调用
谢谢
呈现视图控制器在UITabController中定义:
let qrPlaceholderViewController = QRPlaceholderViewController()
let controllers = [restaurantNavController,favouritesViewController, qrPlaceholderViewController, profileViewController]
self.viewControllers = controllers发布于 2016-11-23 15:15:53
这里的问题是ARC在做它的工作。
当呈现视图控制器呈现另一个视图控制器时,ARC正在卸载呈现控制器。这意味着当所呈现的视图控制器被取消时,呈现的视图控制器将被恢复,从而迫使viewDidLoad方法再次被调用。
解决方案:
有几种解决办法:
首先,我只是在一个助手中存储了一个标志,我可以在viewDidLoad方法中检查它是否已经加载过,如果已经加载了,就不要再显示视图控制器了。
或者,我更改为在扫描了qr代码之后,在呈现的视图控制器委托(呈现控制器)中调用一个函数,该函数导航到我想要的视图,因此跳过了再次执行viewDidLoad的问题。
https://stackoverflow.com/questions/40763959
复制相似问题