2014-12-27 30 views
0

我正在創建一個測驗應用程序,用戶可以在其中選擇他們想要在第一個屏幕上執行的類別。在他們做出選擇之後,用戶應該按下begin按鈕,它將把它帶到那個VC。選擇哪個ViewController切換到Picker查看

我不知道是否有每個類別的視圖控制器將是最有效的方法來解決這個問題。如果有人有任何建議,他們將非常感激。

到目前爲止,我已經實現了這一點:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent: (NSInteger)component 
{ 
    ObjectiveCViewController *objC; 
    CViewController *cVC; 
    switch (row) { 
     case 0: 
      objC = [self.storyboard instantiateViewControllerWithIdentifier:@"ObjectiveCViewController"]; 
      [self presentViewController:objC animated:YES completion:nil]; 
     break; 
     case 1: 
      cVC = [self.storyboard instantiateViewControllerWithIdentifier:@"cViewController"]; 
      [self presentViewController:cVC animated:YES completion:nil]; 
     break; 
    } 
} 

這工作完全正常,只要切換視圖控制器去,但只要一被選中,將用戶帶到該視圖控制器,而不是等待要按下按鈕。

另外,因爲一個按鈕只能鏈接到一個VC什麼是這個問題的可接受的解決方案呢?

+1

至於每個類別都有一個新的視圖控制器,它取決於你的UI對於每個類別有多大的不同。如果只有問題不同,那麼就不需要有不同的視圖控制器。如果您對每個類別都有不同的ui,那麼這是有道理的。 就按鈕選擇和按鈕按下去.Cedric的回答也是正確的,根據我。 – 2014-12-27 20:11:57

回答

3

對每個類別都有一個viewcontroller絕對不是要走的路。你會想製作一個QuestionViewController,它知道如何處理和顯示Question對象。您可以根據您的選擇獲取正確的問題。

至於你在做什麼,這會工作:

在你的類延續類別存儲選定的視圖控制器有一個UIViewController *viewController屬性。

- (void)beginButtonPressed:(id)sender { 
    [self presentViewController:self.viewController animated:YES completion:nil]; 
} 

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent: (NSInteger)component 
{ 
    switch (row) { 
     case 0: 
      self.viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ObjectiveCViewController"]; 
     break; 
     case 1: 
      self.viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"cViewController"]; 
     break; 
    } 
} 
+0

我不知道爲什麼我沒有想到這一點。感謝您的幫助 – Brendon 2014-12-27 20:19:11

+1

至於您在嘗試什麼,它是一種有效的設計模式,通常稱爲「繼承」您可以將UIViewController *指針變爲其他共享超類,您自己設計的抽象超類,並實現任何共享功能在那裏(所以這些都是你的其他類聲明和知道的) – Jef 2014-12-27 22:28:52