什么是rootViewController?我什么时候需要使用它?

4
在我的iOS应用中集成支付网关时,我使用了以下rootViewController属性:
 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

 UINavigationController *controller = [storyboard instantiateViewControllerWithIdentifier:@"navCtrlID"];

 [[UIApplication sharedApplication].keyWindow setRootViewController:controller];

 [self.navigationController presentViewController:controller animated:YES completion:nil];

虽然它能够完成任务,但现在我需要按多次返回按钮才能回到上一页。

为什么会这样呢?


2
请您澄清一下您的问题。当您多次按下返回按钮时会发生什么? - user5087998
当我按下返回按钮时,它会显示一个空白屏幕,再次点击返回后,它看起来正在返回,经过几次尝试后,它才回到上一个控制器。 - ios_Dev
1个回答

2

RootViewController是应用程序堆栈上的第一个ViewController。您只应在AppDelegate的以下方法中设置它:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

在您的情况下,由于您从Storyboard实例化它,具有ID“navCtrlID”的NavigationController将首先显示。如果它只有一个ViewController,在按返回键时不应弹出导航堆栈。

如果您在添加此特定视图之前呈现了ViewControllers,则不应该像这样显示它。相反,例如使用:

[self presentViewController: controller animated:YES completion:nil];

是的,我有许多视图控制器,我正在使用你说的代码,但仍然显示相同的结果。 - ios_Dev
在呈现这个新的导航控制器之前,你有哪些元素? - LopesFigueiredo
尝试移除这行代码: "[[UIApplication sharedApplication].keyWindow setRootViewController:controller]; " - LopesFigueiredo
无论如何,我更新了我的答案,解释了什么是RootViewController以及何时设置它。 - LopesFigueiredo
请为我的情况添加一行:[self.navigationController popToRootViewControllerAnimated:YES]; 可能会有帮助,请点赞。谢谢。 - ios_Dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接