Pat*_*ick 5 iphone xcode objective-c ios
在我的应用程序中,我想显示一个登录屏幕 - 当应用程序启动时以及应用程序变为活动状态时将显示该屏幕.作为参考,我使用的是故事板,ARC,它是一个标签栏应用程序.
因此,我需要在方法中执行以下过程applicationDidBecomeActive:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if ( ... ) { // if the user needs to login
PasswordViewController *passwordView = [[PasswordViewController alloc] init];
UIViewController *myView = self.window.rootViewController;
[myView presentModalViewController:passwordView animated:NO];
}
}
Run Code Online (Sandbox Code Playgroud)
在某种程度上这确实有效 - 我可以调用一个方法,viewDidAppear其中显示一个警报视图以允许用户登录.但是,这是不可取的,我想有一个登录文本框和其他ui元素.如果我不调用我的登录方法,即使我在视图上放置了标签和其他元素,也没有任何反应并且屏幕保持黑色.
有谁知道解决这个问题的方法?我的密码视图嵌入在导航控制器中,但与主故事板分离.
各种各样的答案终于让我找到了一个似乎并不太复杂的答案,所以我会在这里发布 - 如果我说实话,它实际上看起来非常好.
首先,我的密码视图嵌入在导航控制器(编辑器 - >嵌入)中,并使用带有id的模态segue连接到主标签栏控制器,在我的情况下为"loginModal".
在applicationDidBecomeActive方法中放这样的东西:
[self performSelector:@selector(requestPasscode) withObject:nil afterDelay:0.2f];
Run Code Online (Sandbox Code Playgroud)
然后将此功能放在App Delegate中的某个位置
-(void)requestPasscode{
if ( /* If the user needs to login */ ) {
[self.window.rootViewController performSegueWithIdentifier:@"loginModal" sender:self];
}
}
Run Code Online (Sandbox Code Playgroud)
这将在应用程序开始或进入前台时显示您的登录视图(例如,切换应用程序时).
注意: 如果您的应用程序的根嵌入在导航控制器中,则上述行将不起作用.
然而,有两个错误;
这两个都导致应用程序崩溃,因此该applicationWillResignActive方法中包含以下行.
[self.window.rootViewController dismissViewControllerAnimated:NO completion:nil];
Run Code Online (Sandbox Code Playgroud)
它基本上驳回了所有呈现的模态视图.这可能不是理想的,但是模态视图通常不会用于数据输入,因此在许多情况下,这是期望的效果.
| 归档时间: |
|
| 查看次数: |
6819 次 |
| 最近记录: |