在应用简历上显示视图(在我的情况下是登录屏幕)的最佳方式是什么。从环顾四周来看,我一直在AppDelegate中玩applicationDidBecomeActive
事件,但我似乎无法理解如何从这里正确显示视图。
我尝试使用self.window
和/或它的子视图来抓取当前窗口,但是来自AppDelegate self.window
的是nil。
到目前为止,这个应用程序似乎已正确连接,但我对两件事情感到困惑。
A)为什么self.window nil来自AppDelegate的applicationDidBecomeActive
事件处理程序。
B)在应用程序恢复时显示登录视图(或类似文件)的正确/正常方式是什么。
答案 0 :(得分:4)
为您的所有应用程序实现自定义UIViewController。在此视图中,控制器在viewWillAppear
消息中实现逻辑,以确定并在必要时显示登录屏幕。
//CustomViewController.h
@interface CustomViewController : UIViewController
@end
//CustomerViewController.m
@implementation CustomViewController
-(void)viewWillAppear:(BOOL)animated{
if(login_required){
LoginViewController *loginView = [[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil];
[self presentModalViewController:loginView animated:false];
}
}
@end
然后,简单地说,在您的登录视图控制器中确保您致电:
[self dismissModalViewControllerAnimated:false];
这种方法的好处有两个方面。首先,这是一个非常简单的实现。但是,最引人注目的是,为应用程序的视图控制器提供基类提供了提取通用逻辑的机会。
答案 1 :(得分:2)
我参与了由Chris Lowe在raywenderlich.com上提供的安全教程,该教程旨在演示如何使用基本的iOS安全性来锁定应用程序。
本教程背后的前提是,应用程序会在首次启动时提示登录,如果在通过在viewDidLoad中使用NSNoftificationCenter解锁设备时恢复应用程序并订阅通知:deviceWillLock和deviceWillUnlock。 所有这一切都假设设备已设置为锁定。
Basic iOS Security Tutorial Part 2 - 这是具有NSNotification注册的部分。
Basic iOS Security Tutorial Part 1 - 为清晰起见,这是本教程的第一部分。
答案 2 :(得分:1)
我也遇到了这个问题,并在研究解决方案时遇到了这个问题。我不想为我的视图创建中级超类,我不确定它如何与导航控制器一起工作。我想出了另一个适合我的解决方案 - 我想我会分享它。它基于NSNotificationCenter
。
在你的app delegate中创建一个属性来保存对当前显示的视图控制器的引用 - 比如currentViewController
。
然后在applicationDidFinishLaunching
方法中,注册一个块观察器来更新currentViewController
属性,如下所示:
[[NSNotificationCenter defaultCenter] addObserverForName:@"CurrentViewChanged"
object:nil
queue:nil
usingBlock:^(NSNotification *note)
{self.currentViewController = (UIViewController *)note.object;} ];
在视图控制器实现中,更新viewDidAppear
方法,通过添加以下行来通知观察者正在显示新的视图控制器
[[NSNotificationCenter defaultCenter] postNotificationName:@"CurrentViewChanged" object:self];
最后,在app delegate中的applicationDidBecomeActive方法中包含代码,以强制显示登录屏幕的模式。
UIStoryboard *mainStoryBoard = self.window.rootViewController.storyboard;
UnlockViewController *uvc = [mainStoryBoard instantiateViewControllerWithIdentifier:@"modalUnlockView"];
uvc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self.currentViewController presentViewController:uvc animated:YES completion:NULL];
需要注意的其他几项: -
nil
来禁用登录屏幕显示。如果要在启动后第一次进入应用程序时显示登录屏幕,请在applicationDidFinishLaunching
方法中包含以下行。
self.currentViewController = self.window.rootViewController;
我希望这有一些用处。
谢谢