2012-12-04 54 views
0

我相信有一個簡單的方法來做到這一點,我明顯缺少。UINavigationController推送到不同的UIViewController

我在UINavigation控制器三大類:

  1. MasterNavViewController - 型的UINavigationController的 - 擁有在所有後續視圖控制器的性能。
  2. FirstNavViewController - 類型爲UIViewController。
  3. SecondNavViewController - 類型爲UIViewController。

由於線程的原因,我不想在這裏進入我想從FirstNavViewController轉移到SecondNavViewController使用代碼。我曾嘗試:

[self.navigationController pushViewController:SecondNavViewController animated:YES]; 

但我在我的代碼得到一個錯誤:使用未聲明的標識符「SecondNavViewController」你的意思是MasterNavViewController的?

我不完全確定如何繼續此操作。我曾嘗試導入我的SecondNavViewController.h,但似乎也沒有工作。

我在想也許我試圖做錯誤的方式。任何指針將不勝感激! James

按照要求: 我沒有在代碼中明確地創建SecondNavViewController,我不知道怎麼......但那就是我最可能出錯的地方。我創建了類&,然後將它們與我拖入IB的UIViewController鏈接起來。通常我會在兩者之間創建一個推送隊列,但在這種情況下,我不想那樣做。

+0

你如何創建SecondNavViewController對象?發佈該代碼。 – iDev

+0

您需要傳遞一個引用您要顯示的視圖控制器實例的變量,而不是該類的名稱。 – rmaddy

回答

0

SecondNavViewController不等於secondNavViewController:這可以如下容易。 Objective-C區分大小寫。

所以,你需要SecondNavViewController實例,如:

SecondNavViewController * secondNavViewController = [[SecondNavViewController alloc] ...]; 
[self.navigationController pushViewController:secondNavViewController animated:YES]; 
... 
+0

謝謝@Kjuly! 使用此代碼: 'SecondNavViewController * navcontroller = [[SecondNavViewController alloc] init]; [self.navigationController pushViewController:navcontroller animated:YES];' 視圖現在正確地推送到SecondNavViewController UIViewController類,但它正在加載一個黑色背景。這是因爲視圖加載不正確(也許它需要從FirstNavViewController初始化時傳遞給對象?)一些谷歌搜索後,我修改了viewLoad&viewDidLoad方法,但似乎沒有任何工作。任何更多的幫助將是偉大的!謝謝! – JamesLCQ

+0

@JamesLCQ如果您在沒有Interface Builder的情況下創建了視圖,則需要實現'-loadView'方法,其中創建self.view。 – Kjuly

+0

我在IB中創建了UIViewController(即拖拽了對象並修改了它的外觀,但是我只是在代碼中調用了它),您關於'loadView'的聲明是否仍然適用?如果是這樣,我已經將[super self.view]放入'loadView'方法卻無濟於事,我應該把這個方法放到什麼地方?謝謝! – JamesLCQ

0

如果要在界面構建器中創建UIViewController並以編程方式初始化並顯示它,則必須使用-initWithNibName:bundle:創建類的實例,並將它們傳遞給-pushViewController:animated:而不是類名稱。

由於線程原因,您必須小心地執行UI的所有更新,包括在主線程上推送新的視圖控制器。

dispatch_async(dispatch_get_main_queue(), ^(void) 
{ 
    // update ui or push view controller etc. 
}); 
+0

謝謝!我覺得我現在正在這個地方找到一個地方。我不知道如何在-initWithNibName:bundle中創建實例:你能提供一些示例代碼嗎? 作爲一項測試,我將SecondNavViewController添加到.h&合成它。代碼已編譯,但執行該方法時出現錯誤: 應用程序嘗試在目標上推送無視圖控制器。這似乎指向了錯誤的ViewContoller ... – JamesLCQ

+0

看看這個關於從Nib文件設置viewcontoller的教程,它有點過時了,因爲它使用Xcode 3.x而不是xcode 4,但概念完全相同......您設計視圖控制器在一個nib/xib文件,連接插座,然後使用-initWithNibName:bundle:創建一個可以以編程方式顯示的實例。 – ade177

+0

謝謝!我的帖子中沒有看到任何鏈接。你包括它嗎? – JamesLCQ

相關問題