viewWillAppear 不调用 IOS 13 目标 C [关闭]

Posted

技术标签:

【中文标题】viewWillAppear 不调用 IOS 13 目标 C [关闭]【英文标题】:viewWillAppear does not call in IOS 13 objective C [closed] 【发布时间】:2020-03-27 17:02:12 【问题描述】:

我有一个在 Xcode 8 下创建的大型应用程序(所以它是老派)。我没有使用 swift 或故事板,所有控件都是在代码中创建的。

自从移至 ios 13 / Xcode 11.3 后,当 VC 委托被推送到导航控制器上,然后调用 popToRootViewController 时,不会调用 rootViewController viewWillAppear。

我试过用

VC.modalPresentationStyle=UIModalPresentationFullScreen 没有任何行为变化。

我有一个包含窗口的 MainWindow.xib,并且 navController 设置为子视图

在 AppDelegate.m 中:

mainVC = [[MainViewController alloc] init];
selectSomethingVC=[[SelectSomethingViewController] init];

navigationController = [[UINavigationController alloc] initWithRootViewController:mainVC];
[window addSubview:navigationController.view];
[window setRootViewController:navigationController];        
[window makeKeyAndVisible];

在 MainViewController 中

- (IBAction) selectSomethingButtonPressed:(id)sender

AppDelegate *del = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[self.navigationController pushViewController:[del selectSomethingVC] animated:YES];

在 SelectSomethingViewController 中

- (IBAction) cancelButtonPressed:(id)sender

[self.navigationController popToRootViewControllerAnimated:true];

此代码在以前的 Xcode 版本和 IOS 10 上运行良好,并且运行 viewWillAppear 中的代码,这对于应用程序的运行至关重要。在早期的 IOS 和 Xcode 上,无论是在模拟器上还是在实际设备上。

对于 IOS 13 和 Xcode 11.3,模拟器不会调用 viewWillAppear,但奇怪的是,在运行 IOS 13 并在 Xcode 中作为测试设备启动的实际设备上可以正常工作。我愿意解决问题或提出建议。

【问题讨论】:

[window addSubview:navigationController.view]; 不应该在那里,它可能是问题的原因。 是的,就是这样。谢谢 【参考方案1】:

如果您不手动添加子控制器,手动添加控制器的视图是没有意义的。

以下行应删除:

[window addSubview:navigationController.view];

viewWillAppear 与将视图添加到层​​次结构相关联。当您使用setRootViewController: 显示控制器时,视图已经是层次结构的一部分,这可能会破坏事件机制。

【讨论】:

是的,你可能是对的。想知道为什么它可以在以前的 iOS 和模拟器下工作吗?

以上是关于viewWillAppear 不调用 IOS 13 目标 C [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

navigationController popToRootViewControllerAnimated:YES 不调用 viewWillAppear

如何使用情节提要 iOS7 调用 viewWillAppear

viewDidAppear 未调用但 viewWillAppear 调用仅出现在 iOS5

ViewWillAppear 被调用两次

IOS 将值从 App Delegate 传递到初始视图控制器并在 viewWillAppear 中使用这些值

iOS 记录viewWillAppear不执行的一种情况