2013-02-15 44 views
1

我有一个程序,用户必须输入密码才能使用它,但我不知道什么用户必须输入密码每次。我相信我可以通过设置第一个视图控制器来做到这一点,如果条件为真。组的第一视图控制器AppDelegate.m

守则AppDelegate.m:

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 
if ([standardUserDefaults objectForKey:@"PassCorrect"]) { 
    //WHAT GOES HERE 
    return YES; 
} else { 
    return YES; 
} 

PassCorrect持有布尔设置为TRUE,如果密码正确输入。我需要知道如何在if语句中设置第一个视图控制器为不同于默认值的内容。

我环顾四周,但到目前为止,我所遇到的枯萎抛出错误或只是所有的东西拿出空白屏幕。任何人都有实际的工作。

回答

5

我建议不要试图改变AppDelegate的行为。相反,在你的根viewController中,只需检查用户是否有存储的密码(显然你必须存储它),如果他们没有,那么在viewDidAppear事件中,展示一个模态viewController。如果他们这样做,那么你的应用可以正常进行

+0

我试过了。在我的第一个viewController(EnterPINViewController)的viewDidLoad函数中。我检查状态和所有工作,问题是,当我尝试呈现模式时,它给我一个很大的错误:'试图在上呈现其视图不在窗口中的层次!'。当用户输入PIN码后,当我显示相同的模式时,这种情况不会发生。 – carloabelli 2013-02-17 21:18:00

+0

对不起,我的错误。我把相同的代码放在viewWillAppear中,但得到相同的错误。 – carloabelli 2013-02-17 22:27:50

+0

需要'viewDidAppear'而不是'viewWillAppear' – carloabelli 2013-02-23 18:40:35

0

这是有帮助吗?

-(void)setFirstView 
    { 

     if(![self userIsLoggedIn]) 
     { 

      [self.window setRootViewController:self.loginViewController]; 
     } 
     else { 
      [self.window setRootViewController:self.mainViewController]; 
     } 
    } 

编辑:

@property (nonatomic, strong) UIViewController* loginViewController 
@property (nonatomic, strong) UIViewController* mainViewController 
-(UIViewController*)loginViewController 
{ 
    if(!_loginViewContoller) 
    { 
     _loginViewController = [UIViewController alloc]initWithNibName:@"loginNibName.xib"]] 
    } 
    return _loginViewController; 
} 
+0

如何让我的视图控制器自身的成员。 – carloabelli 2013-02-15 19:57:26

+0

属性添加到您的控制器在您的应用程序委托,然后在setter方法初始化视图控制器 见我的代码示例 – joshglick 2013-02-16 22:19:27

+0

这是一个*吸气*,不是setter编辑。 – Cyrille 2013-02-16 22:26:17

0
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 

    [self loadInitialViewController]; 

    [self.window setBackgroundColor:[UIColor whiteColor]]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

-(void)loadInitialViewController 
{ 
    //Create first view controller 
    NewLoginViewController* ipadLoginViewController = [[NewLoginViewController alloc]initWithNibName:@"NewLoginViewController" bundle:[NSBundle mainBundle]]; 

    //if you want a nav controller do this 
    UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:ipadLoginViewController]; 

    //add them to window 
    [self.window addSubview:self.navController.view]; 
    [self.window setRootViewController:self.navController]; 


    if([standardUserDefaults objectForKey:@"PassCorrect"]) 
    { 
     //push the next view controller on the stack inside the initial view 
     [ipadLoginViewController bypassLoginView]; 
    } 

} 

我更喜欢这样做是为了操纵直接原因则登录页面是堆栈,当你注销了在窗口。您也可以通过直接操作窗口来添加第二个视图控制器,就像添加到窗口步骤一样。

+0

我得到一个错误:无法加载NIB捆绑:...(一些东西)...名为“HomeViewController” – carloabelli 2013-02-15 20:12:21

+0

当你看厦门国际银行文件检查器将其设置为HomeViewController?看起来你知道xib知道它属于哪个视图控制器。 – Kibitz503 2013-02-15 22:10:19

+0

我不是用xib代替故事板。我认为他们几乎是一样的。看来该视图设置为“HomeViewController”。 – carloabelli 2013-02-17 00:24:53

2

我已经做了,对SWReaveaViewController希望这将是使用全为ü

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 

UIViewController *viewController; 

NSUserDefaults *loginUserDefaults = [NSUserDefaults standardUserDefaults]; 
NSString *check=[loginUserDefaults objectForKey:@"Checklog"]; 

if ([check isEqualToString:@"login"]) { 

    viewController = [storyboard instantiateViewControllerWithIdentifier:@"SWRevealViewController"]; 
} else { 

    viewController = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"]; 
} 


self.window.rootViewController = viewController; 
[self.window makeKeyAndVisible]; 
+0

谢谢man..It帮助我 – 2015-09-09 10:11:11

+0

它可以随时随地 – 2015-09-09 11:01:36

相关问题