2014-03-03 79 views
0

我是iOS編程的初學者,請不要殺我:]。我有授權申請,當我成功授權時,我想去第二個視圖。當授權失敗時,我會顯示警報。我的授權碼:成功登錄後自定義segue

- (IBAction)LoginClick:(id)sender { 

    for(User *user in self.allUsers){ 
     if([user.userName isEqualToString:self.usernameTextField.text] && [user.password isEqualToString:self.passwordTextField.text]){ 
      // Logged in --> go to second view (TableView) 
      [self performSegueWithIdentifier:@"LoginSegue" sender:self]; 
     } 
     else{ 
      // Wrong password or username 
      Alerts *alert = [Alerts new]; 
      [alert showAlert:LOGIN_ERROR]; 
     } 
    } 
} 

我試圖尋找定製化(SEGUE)第二視圖,一個簡單的方法,當我成功登錄,但我沒有找到。現在,我有這樣的故事板:

https://www.dropbox.com/s/dc8h4u920wgt47s/Screenshot%202014-03-03%2011.36.56.png

和代碼視圖之間的過渡是:

[self performSegueWithIdentifier:@"LoginSegue" sender:self]; 

結果是錯誤:

*終止應用程序由於未捕獲的異常' NSGenericException',原因:'無法找到導航控制器for segue'LoginSegue'。只有當源控制器由UINavigationController的實例管理時,才能使用推塞網。

什麼問題?爲什麼我需要「導航控制器」之類的東西。我需要爲segue創建一個類?解決這個問題最簡單的方法是什麼?謝謝。

編輯-------解決方案

感謝大家的幫助。我將導航控制器添加到我的應用程序作爲初始視圖我發現,使用自定義的segue併爲此自定義segue製作類是不必要的。解決我的問題最簡單的方法是連接ViewControllers(不是按鈕和第二個ViewController,所以我第一次...)並命名push segue。這個名字我這裏使用的代碼:

- (IBAction)LoginClick:(id)sender { 

    for(User *user in self.allUsers){ 
     if([user.userName isEqualToString:self.usernameTextField.text] && [user.password isEqualToString:self.passwordTextField.text]){ 
      // Logged in --> go to second view (TableView) 
      [self performSegueWithIdentifier:@"LoginSegue" sender:self]; 
     } 
     else{ 
      // Wrong password or username 
      Alerts *alert = [Alerts new]; 
      [alert showAlert:LOGIN_ERROR]; 
     } 
    } 
} 

混凝土進入:[自performSegueWithIdentifier:@ 「LoginSegue」 發件人:自我]。

而且所有的作品都很棒。當我用正確的密碼和用戶名登錄時,我被重定向到第二個視圖。

+0

退房是什麼SEGUE,以及如何使用它 - HTTP:// www.raywenderlich.com/50310/storyboards-tutorial-in-ios-7-part-2 – ignotusverum

+0

不要忘記標記頂部答案和/或提出幫助你的答案。其他面臨同樣問題的人會想知道什麼解決了問題,那些回答問題的人應該得到重要的答覆。如果沒有人回答你的問題。評論他們要求更多的細節 –

回答

1

錯誤是告訴你,你不能使用該類型的轉換,而無需使用導航控制器。

只需從右側菜單中拖放一個導航控制器,並將其設置爲右側屬性部分中的Initial Controller即可。像這樣:

enter image description here

然後登錄控制器連接爲root view controller。那麼這將爲你工作。

最終的結果應該是這個樣子:

enter image description here

1

當您不使用UINavigationController而不是Push segue時,您應該使用Modal繼續。

+0

根據用戶的要求,模態賽格沒有多大意義。登錄後將整個應用程序顯示爲模式窗口? –

+0

當您在iPhone上使用模態細節時,如果您不編程展開細節,則會釋放第一個視圖控制器,並且完全被忘記替換爲新模型。這樣你的應用程序運行在一個新的視圖控制器中。當然,如果你需要回到登錄界面,無論是使用導航控制器並推入segues,還是將unwind segue添加到此登錄視圖控制器,或者再次使用其他模態segue。但在我看來,沒有使用這種技術的設計缺陷。 – Zaphod

0

可以做兩件事情你可以做,這很可能你沒有做。導航控制器可能會丟失,它需要是根視圖控制器。將導航控制器添加到項目中實際上非常簡單。 打開故事板並選擇第一個視圖,然後轉到。

Editor>Embed In> Navigation Controller

如果不工作,你可以實例化一個視圖控制器的對象,並在賽格瑞方法準備做一個明確的SEGUE。

NextViewController *nvc = [segue destinationViewController]; 

要了解導航控制器不遵循這一link

0

爲了利用推SEGUE,你的根視圖控制器需要一個導航控制器。你可以使用沒有一個像這樣的「主」控制器的唯一segue,是一個模式的segue

0

當你使用segues時,你的firstViewController應該在Navigation controller下。如果您尚未嵌入導航控制器VC然後點擊VC的故事板和Xcode中點擊頂部

editor -> embed -> navigationController 

enter image description here