iOS presentViewController不会调用viewDidLoad

 -路人甲___ 发布于 2022-12-31 19:50

我正在实现自己的"后退"按钮.其中onClick,以下代码在ViewController被解雇的(VC)中执行:

    关闭当前VC(VC#1)

    弹出当前VC(VC#1)关闭我的自定义 navigationStack

    从中获取最后一个VC(VC#2)navigationStack,然后使用它

presentViewController

后面的工作是视觉上有效的 - 即当前VC消失,之前VC出现.但是,viewDidLoad不调用该方法.因此,屏幕不会更新数据更新viewDidLoad.

 [self dismissCurrentViewController:self completion:^{
    [TWStatus dismiss];
    FHBaseViewController *vcToDisplay = [[FHDataManager sharedInstance] popNavigationStack];
    [vcToDisplay.homeVC presentViewController:vcToDisplay animated:NO completion: ^{ }];
}];

问题:

    我的印象是viewDidLoadpresentViuewController使用时总会被调用?

    我使用viewDidLoadVC#2中的一个名为ONLY的方法"构建"屏幕.iOS如何在不显示屏幕的情况下显示viewDidLoad

顺便说一下,我没有使用故事板.任何帮助表示赞赏!

1 个回答
  • 我的猜测是viewWillAppear被调用但viewDidLoad不是,至少不是你预期的时候. viewDidLoad应该调用一次,但是根据您管理视图控制器的方式,viewDidLoad每次出现视图时都可能不会触发(在加载后会发生).

    The completion handler is called after the viewDidAppear: method is called on the presented view controller.来自presentViewController doc

    所以把它放在代码中,在调用时使用断点,super并在发生此转换时验证它是否被调用.

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
    }
    

    编辑:既然你验证了它viewWillAppear被调用,那么我会说它是由你如何管理视图控制器生命周期.即使使用标准UINavigationController,viewDidLoad也不会在导航堆栈上弹出项目时显示视图时调用.viewWillAppear如果你没有使用,我会把你的逻辑移到UINavigationController

    2022-12-31 19:52 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有