首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >提交视图控制器被取消后被调用的视图控制器的viewDidLoad

提交视图控制器被取消后被调用的视图控制器的viewDidLoad
EN

Stack Overflow用户
提问于 2016-11-23 11:59:06
回答 1查看 1.9K关注 0票数 2

我有一个视图控制器,它显示另一个视图控制器,如下所示

代码语言:javascript
复制
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 (呈现视图控制器)然后调用

代码语言:javascript
复制
self.dismiss(animated:true, completion: nil)

据我所知,它无论如何都会调用呈现视图控制器拒绝函数。

问题是,一旦提出的视图控制器被取消,呈现视图控制器的viewDidLoad再次被调用,这意味着视图控制器再次出现。

有什么办法绕过这件事吗?

即使我使用委托,呈现视图控制器的viewDidLoad也会再次被调用

谢谢

呈现视图控制器在UITabController中定义:

代码语言:javascript
复制
let qrPlaceholderViewController = QRPlaceholderViewController()
let controllers = [restaurantNavController,favouritesViewController, qrPlaceholderViewController, profileViewController]
self.viewControllers = controllers
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-23 15:15:53

这里的问题是ARC在做它的工作。

当呈现视图控制器呈现另一个视图控制器时,ARC正在卸载呈现控制器。这意味着当所呈现的视图控制器被取消时,呈现的视图控制器将被恢复,从而迫使viewDidLoad方法再次被调用。

解决方案:

有几种解决办法:

首先,我只是在一个助手中存储了一个标志,我可以在viewDidLoad方法中检查它是否已经加载过,如果已经加载了,就不要再显示视图控制器了。

或者,我更改为在扫描了qr代码之后,在呈现的视图控制器委托(呈现控制器)中调用一个函数,该函数导航到我想要的视图,因此跳过了再次执行viewDidLoad的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40763959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档