2013-05-03 53 views
12

我正在學習ios/xcode並在路障中。以模式爲基礎的故事板登錄屏幕示例

我有一個tabbarcontroller +基於導航的設計。如果用戶沒有登錄,我需要提供一個登錄屏幕。這裏是基本的漫畫。登錄頁面需要的導航欄(我跟着教程把一個「轉到」按鈕欄上。

LoginController: (LTController.h,.m) 

Main View:TabBarController> 
        NavigationController>View1>View1a 
        NavigationController>View2 

Storyboard layout

我對模式的看法,代表法等在這裏讀到很多帖子的大多數他們都是代碼片段不幸的是有點過了頭我的初級水平。

將不勝感激一個簡單的解釋如何實現這一目標。Espacially記哪些文件需要改變將是巨大的。

比ks

+0

我需要一些清晰度,你有1個標籤欄與2個圖標和一個公共和另一個非公開這是保護身份驗證,對不對? – 2013-05-03 04:01:44

+0

@KumarKl號碼現在只有一個標籤欄有兩個標籤。登錄屏幕只有一個導航欄來放置登錄按鈕。 – aVC 2013-05-03 04:03:04

+0

K我知道了..等我會放些東西 – 2013-05-03 04:04:33

回答

12

這裏是場景。它非常簡單。我只希望它會有用。

enter image description here

對於UITableBarController給身份一個名字故事板IDenter image description here

然後在您的視圖控制器類文件你有身份驗證憑據權>?在那裏做一些東西進行認證。然後按照這個代碼。它工作正常

- (IBAction)Login:(id)sender { 

    if(authenticated) // authenticated---> BOOL Value assign True only if Login Success 
     { 
      UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
      UITabBarController *obj=[storyboard instantiateViewControllerWithIdentifier:@"tab"]; 
      self.navigationController.navigationBarHidden=YES; 
      [self.navigationController pushViewController:obj animated:YES]; 
     } 
+1

隨意問,如果您有任何問題 – 2013-05-03 04:35:10

+1

非常感謝。通過viewController(你提到要添加代碼),你的意思是loginViewController? – aVC 2013-05-03 04:36:57

+1

是的。你有LoginViewController或ViewController的權利。具有主頁面的登錄頁面權限? – 2013-05-03 04:52:17

10

它看起來像你是一個良好的開端。既然你有一個tabbar設計,你必須做出如何呈現登錄頁面的選擇,以及何時你會這樣做。

您必須在顯示標籤欄之前顯示它,或者將邏輯放入第一個視圖控制器以啓動登錄過程。還有其他方法,但它們變得更加複雜,我現在想給你基本的選擇。

這是我推薦的一般概念。

a)在某處創建持久存儲變量以確定用戶是否登錄。

b)在視圖將加載方法的第一個視圖控制器附加到您的TabBar的檢查此標誌。

c)直接從視圖控制器呈現模態登錄頁面。如果他們登錄,很好的解僱它,如果不是,他們被困在模態頁面上。

因此,這裏基本上是如何做到這一點:

解釋的目的,我要打電話給你的第一個視圖控制器 - fviewController - - 第一個標籤您的TabBar控制器上好嗎?

在fviewController.m

-(void)viewDidLoad { 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    if ([[defaults objectForKey:@"loggedIn"]boolValue]) { 
     NSLog(@"user is logged in - do nothing"); 
    } 
    else { 

     NSLog(@"User is not logged in"); 
     [self performSegueWithIdentifier:@"LoginPage" sender:self]; 
    } 

} 

一對夫婦更多的積分 它看起來像你使用故事板和塞格斯。在這種情況下,你會做以下幾點:

  • 您的登錄頁面創建一個新的視圖控制器
  • 調速拖動你的TabBar
  • 一個SEGUE連接到它的第一個視圖控制器識別SEGUE爲「莫代爾」
  • 爲登錄視圖控制器一個新的視圖控制器類出示您查看和管理您的身份驗證
  • 如果用戶登錄,您需要存儲回NSUserDefaults的 注意:如果您有多個用戶或其他方案,則可能需要修改我在當前用戶的示例go track狀態中顯示給您的單個值。 另外:如果您有註銷代碼,則需要正確設置標誌。 另外:如果用戶要頻繁登錄和註銷,那麼使用視圖將會出現而不是視圖加載。

要翻轉狀態:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setValue:[NSNumber numberWithBool:YES] forKey:@"loggedIn"]; //in 
    [defaults setValue:[NSNumber numberWithBool:NO] forKey:@"loggedIn"]; //out 

    do this in your login controller 

要關閉該模式的看法。從技術上講,你應該使用委託回調做到這一點,但如果你試圖讓事情變得簡單,這應該是確定

 [self dismissViewControllerAnimated:YES completion:^{ 

     }]; 

所以,你的邏輯是這樣的 - 他們沒有登錄?是的,然後設置爲登錄狀態,然後解僱。如果他們不想登錄,不要做任何事情。他們被卡住了。最後,如果你需要設置登錄控制器,你可以使用下面的方法:prepareForSegue ...來在變化發生之前初始化變量。如果你正在做一些教程,你可能已經閱讀過它。

呃......希望有幫助。這是一個非常基本的方法。如果你得到這個工作,你可以繼續添加更多的安全性和功能。

祝你好運。

+0

謝謝你的細節。是的,我正在閱讀很多教程。不幸的是,我從頭開始包括Obj C,所以我的機率很大。對此,我真的非常感激。我已經涵蓋了登錄,segue和東西。模態視圖顯示給了我惡夢。我會試試這個。 – aVC 2013-05-03 04:38:47

+0

我希望我可以接受這兩個答案。我贊成你的。我現在正在使用NSUserdefaults教程。謝謝你提到這一點。再次感謝這樣的細節和耐心。 – aVC 2013-05-03 05:18:12

+1

如果您使用segue顯示登錄屏幕,那麼您可以使用unwind segue將其解除。請參閱http://stackoverflow.com/questions/12561735/what-are-unwind-segues-for-and-how-to-use-them – 2013-10-30 17:27:02