2013-12-13 75 views
1

我是Ios開發的新手,我遵循Big nerd書來學習它。我對「navigationController」有困惑。 例如在我的類,它是UITableViewController一個實例(同爲UIViewController任何子類也一樣)我有這樣的:navigationController屬性在UINavigationController.h中聲明,但是UIViewController的一個屬性

[[self navigationController] 
    pushViewController:detailViewController 
    animated:YES]; 

,當我看着蘋果文檔此navigationController似乎是UIViewController的屬性,但據說它是在UINavigationController.h中宣佈的! 我打開UIviewcontroler.h,沒有屬性或方法navigationController,但由於文件說,這的確是在UINavigationController.h

它沒有任何意義可言。首先我知道子類繼承父類的屬性和方法,但UITableViewControler並不意味着UINavigationController的子類,而是UiViewController的子類。所以希望有人明白我在問什麼。當我不從UINavigationController繼承時,我如何能夠訪問此屬性?以及文檔如何顯示作爲UiViewController的財產?

回答

2

UINavigationController.h包含聲明navigationController屬性的UIViewController類別。請記住,文件名只是慣例 - 它們實際上對語言沒有任何意義。文件內的代碼是重要的。僅僅因爲一些代碼在UINavigationController.h中並不意味着它在UINavigationController類中。 「屬於」一個類的頭文件完全可以自由地在其他類上聲明類別,以幫助它們與頭文件關注的類進行交互。

+0

謝謝。你看起來很有知識。我來自Java背景,這就是爲什麼這對我來說不是通常的事情。 –

1

當您使用UINavigationController時,它會自動將自己設置在每個UIVIewController的navigationController屬性中。由於UITableViewController繼承自UIVIewcController,它也會擁有該屬性。

Apple documentation:尋找navigationController。你應該看到這一點:

@property(nonatomic, readonly, retain) UINavigationController *navigationController 

這是在「讓其他相關視圖控制器」

+0

如果在xcode中的任何項目中,你在UIKit.framework - > Headers - > UIViewContoller.h下面去,沒有navigationController屬性,上面的屬性是在UINavigationController裏面定義的。所以我的問題仍然是一樣的,沒有答案。 –

0

的導航控制器對象管理使用導航堆棧當前顯示的屏幕。在這個堆棧的底部是根視圖控制器,堆棧的頂部是當前正在顯示的視圖控制器。由於UINavigationController類繼承自UIViewController類,所以導航控制器具有可通過視圖屬性訪問的其自己的視圖。在部署導航界面時,您必須將此視圖安裝爲您要創建的任何視圖層次結構的根。 UITableViewController從UIViewController繼承,因此可以訪問UINavigationController屬性。請參閱 https://developer.apple.com/library/iOS/documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html

+0

感謝您的解釋,但我仍然困惑,因爲你說UITableViewController和UINavigationController繼承自UIViewController,所以這個屬性是在UINavigationController中定義的,而不是UIViewController,我不明白UIViewController的一個實例如何訪問這個屬性。 –