2013-02-15 74 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

相關問題