2010-12-10 73 views
13

在這裏仍然有我的腦海。我甚至沒有關閉,但無論如何....我有一個從Xcode創建的TabBar應用程序。它的工作原理我有三個選項卡視圖,我知道如何操縱,等等。在Cocoa Touch標籤欄前添加登錄屏幕IOS的應用程序

我想在這件事的前面放一個'login'nib文件,要求用戶回答一個(現在的硬編碼) 用戶名和密碼。如果你沒有錯,那麼,渲染標籤部分,讓他們點擊。

我有另一個應用程序,我已經寫了用戶名和密碼部分,我有麻煩從那裏採取邏輯,並把它放在TabApplication片前。

任何人有任何建議嗎?

回答

17

在AppDelegate中,在application didFinishLaunchingWithOptions方法結束時,你會看到這一點:

[window addSubview:tabcontroller.view]; 
[window makeKeyAndVisible]; 
return YES; 

只需初始化您的登錄視圖控制器和tabcontroller後添加它,就像這樣:

initialScreenViewController = [[InitialScreenViewController alloc] init]; 
[window addSubview:tabcontroller.view]; 
[window addSubview:initialScreenViewController.view]; 
[window makeKeyAndVisible]; 
return YES; 

在你登錄的視圖控制器中,在認證用戶後你可以這樣隱藏它:

[self.parentViewController.view setHidden:YES]; 

它允許您再次顯示它,如果您有註銷功能。

+0

ks明天我會拍這張照片。我通常是一名c#開發人員,所以圍繞這些東西的所有工作的語法和思想仍然在我糊塗的大腦中形成。謝謝。 – 2010-12-10 07:01:44

+0

所以,當它加載時,標籤視圖被加載,我只能看到它的底部,LoginView仍然是'頂部'。我究竟做錯了什麼? – 2010-12-10 16:28:23

2

如果你開始使用默認的標籤欄的應用程序,你可以做這樣的:

  • 在MainWindow.xib中,創建一個包含密碼的屏幕
  • 所有你想有東西一個UIView
  • 鉤住你需要的任何東西到AppDelegate中的IBOutlets,並編寫檢查密碼是否有效的方法。
  • 在的applicationDidFinishLaunching方法,如果用戶輸入正確的密碼,這樣做有[window addSubview:/*whatever you called the view with the password stuff in it*/];
  • 更換[window addSubview:tabBarController.view];

[passView removeFromSuperview]; [window addSubview:tabBarController.view];

,你應該在常規標籤欄的應用程序。

16

的標準方法如下:

  • 包一切登錄屏幕變成一個視圖以及管理一個UIViewController子類相關。
  • 當前通過調用

    LoginController*loginController= ... ; // create the view controller for the login screen 
    [self.tabController presentModalViewController:loginController animated:YES]; 
    

這種方式查看模態在應用程序委託在application:didFinishLaunchingWithOptions:,過渡等之間的動畫是自動處理。

您可以在成功登錄後解除它。它可以從LoginController內通過

[self.parentViewController dismissModalViewControllerAnimated:YES]; 

做不過,我經常需要一次到登錄做是爲了做額外的設置。所以,我會先告訴應用代理登錄完成,然後執行

[self.tabController dismissModalViewControllerAnimated:YES]; 

從應用程序委託。然後我可以在那裏執行額外的任務。

要與應用程序代理進行通信,我會使用NSNotification,但對您而言可能有點困難。

一種可能更容易理解的方式(但對我來說更加醜陋)是在應用程序委託中定義一種方法,例如loginDone。 然後,LoginViewController裏面,你可以做

MyAppDelegate*appDelegate=[[UIApplication sharedApplication] delegate]; 
[appDelegate loginDone]; 
0

我喜歡做如下:

在應用程序委託的didFinishLaunchingWithOptions

FirstViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
SecondViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
ThirdViewController *viewController3 = [[ThirdViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 

UINavigationController *navController1 = [[UINavigationController alloc] initWithRootViewController:viewController1]; 
UINavigationController *navController2 = [[UINavigationController alloc] initWithRootViewController:viewController2]; 
UINavigationController *navController3 = [[UINavigationController alloc] initWithRootViewController:viewController3]; 

self.tabBarController = [[UITabBarController alloc] init]; 
self.tabBarController.viewControllers = @[navController1, navController2, navController3]; 

LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; 
UINavigationController *loginNavController = [[UINavigationController alloc] initWithRootViewController:loginViewController]; 

self.window.rootViewController = loginNavController; 

然後得到一個驗證回調之後,你可以有在你的App Delegate中有這樣的東西:

- (void)setAuthenticatedState:(BOOL)authenticated 
{ 
    if (authenticated == YES) { 
     dispatch_async(dispatch_get_main_queue(), ^(){ 
      self.window.rootViewController = self.tabBarController; 
     }); 
    }else{ 
     // Stuff 
    } 
} 
相關問題