什么是 rootViewController 以及何时使用它?
What is rootViewController & when do I use it?
在我的 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];
它完成了工作,但是现在我必须多次按下后退按钮才能返回。
为什么会这样?
根ViewController 是应用程序堆栈中的第一个ViewController。
您应该只在您的 AppDelegate 方法中设置它:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
在您的情况下,由于您是从 Storyboard 实例化它,因此 ID 为 "navCtrlID" 的 NavigationController 将首先显示。如果它只有一个 ViewController,当您按回键时它不应该弹出导航堆栈。
如果您在添加此特定视图之前显示了 ViewController,则不应那样显示。相反,使用例如:
[self presentViewController: controller animated:YES completion:nil];
在我的 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];
它完成了工作,但是现在我必须多次按下后退按钮才能返回。
为什么会这样?
根ViewController 是应用程序堆栈中的第一个ViewController。 您应该只在您的 AppDelegate 方法中设置它:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
在您的情况下,由于您是从 Storyboard 实例化它,因此 ID 为 "navCtrlID" 的 NavigationController 将首先显示。如果它只有一个 ViewController,当您按回键时它不应该弹出导航堆栈。
如果您在添加此特定视图之前显示了 ViewController,则不应那样显示。相反,使用例如:
[self presentViewController: controller animated:YES completion:nil];