我正在开发一个iPad应用程序,用户只要输入密码,就可以(在某些情况下)打开应用程序。因此,我需要像LoginViewController这样的东西。但是首先,让我们来处理常见的情况,在这种情况下,应用程序只需要显示HomeViewController:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//...
self.controllerHomeView = [[HomeViewController alloc] initWithNibName:@"HomeView" bundle:nil];
self.controllerHomeView.showInitialGuide = isFirstLaunch;
self.window.rootViewController = controllerHomeView;
[self.window makeKeyAndVisible];
//..
}但是,正如我前面所说,一些用户可能已经定义了密码,如果是这样,我们需要显示一个登录屏幕。这就是我为启用这样一个功能所做的工作:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
//---
if(isAppPinSecured && !loginIsAlreadyDisplaying) {
LoginBackgroundViewController *controllerLoginBG = [[LoginBackgroundViewController alloc] initWithNibName:@"LoginBackgroundView" bundle:nil];
self.appPinInputBG = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default-Landscape@2x~ipad.png"]];
self.appPinInputBG.frame = CGRectMake(0, 0, 1024, 748);
self.appPinInputBG.userInteractionEnabled = YES;
[controllerLoginBG.view addSubview:self.appPinInputBG];
//present new root = background
self.window.rootViewController = controllerLoginBG;
//...
}
}我要做的是,将根视图控制器更改为LoginViewController,如果用户输入正确的密码,则将返回到HomeViewController.。
到目前为止,一切都很顺利,除了方向。如果当前接口方向未知,因为LoginViewController (例如,放置在表上的)是LandscapeRight,而不是HomeViewController (LandscapeLeft).中的iPad如果将iPad握在手中,它就会正常工作,但在其他情况下则不然。
关于如何解决这个问题,有什么建议吗?我在plist文件中设置了我的应用程序方向(左风景)。我确实用shouldAutorotate (.)实现了UIInterfaceOrientationIsLandscape无论是在家还是在LoginViewController。
提前感谢!
发布于 2012-11-13 10:15:34
啊,问题是,在viewDidAppear被称为->之前,我试图以模式方式推送一个视图控制器--你不应该这样做……
由于这个错误而更改了我的代码之后,它就像一种魅力一样工作。
发布于 2012-10-08 14:17:18
我认为正在发生的情况是,首选的方向是在初始根控制器上设置的--当您将其切换出去时,它不会被设置。
我建议您考虑始终将HomeViewController作为根控制器。与其切换根控制器,不如推送LoginViewController (如果您希望它立即显示,则没有动画):
[self.navigationController pushViewController:controllerLoginBG animated:NO]这样,您就可以进行诸如注销和弹出HomeViewController之类的工作。它还将保持视图控制器导航的一致性。
https://stackoverflow.com/questions/12781898
复制相似问题