我想在启动ipad应用时有条件地显示登录屏幕。我不想让它成为默认segue的一部分,因为它们只需要定期登录,而不是每次都登录。
我的问题有numerous examples,但它们似乎都早于ios5。但是,当我使用故事板时,似乎没有任何效果。
为了减少这个本质, *使用故事板创建一个新的单一视图应用程序 *添加一个新的viewcontroller到storyboard,给它一个标识符“loginScreen” *在每个视图上放置文本标签,以便在视觉上区分它们。 *在appDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storyboard = [self.window.rootViewController storyboard];
UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"loginScreen"];
[self.window.rootViewController presentModalViewController:loginController animated:TRUE];
return YES;
}
从我看过的例子来看,这应该有效。但它仍然始终显示原始的rootViewController视图。虽然没有错误。
有人能指出我失踪的(可能很小的)事吗?
答案 0 :(得分:2)
事实证明,应用程序在didFinishLaunching
方法中未处于活动状态。
放置它的适当位置是
- (void)applicationDidBecomeActive:(UIApplication *)application
{
UIStoryboard *storyboard = self.window.rootViewController.storyboard;
UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"loginScreen"];
[self.window.rootViewController presentModalViewController:loginController animated:NO];
}
答案 1 :(得分:2)
@deafgreatdane:每次应用程序处于活动状态时,您的解决方案都会以模态方式呈现视图控制器,使其处于后台状态(这可能是合乎需要的)。
在我的情况下(使用它来显示一次性启动屏幕)我会在该解决方案中添加dispatch_once
以确保模态启动屏幕只显示一次:
- (void)applicationDidBecomeActive:(UIApplication*)application
{
static dispatch_once_t onceToken;
dispatch_once( &onceToken, ^
{
SomeLaunchViewController* launchViewController = [[SomeLaunchViewController alloc] init];
[self.window.rootViewController presentViewController:launchViewController animated:NO completion:NULL];
} );
}
此代码段使用ARC。