我有一个在 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 中作为测试设备启动的实际设备上可以正常工作。我愿意解决问题或提出建议。