我有一個基於UINavigationController的屏幕序列。在其中一個屏幕上,我想用自定義TitleView替換標準標題。自定義視圖將使用一個nib文件創建,並且會有一個圖像和多個標籤。如何基於nib文件創建UINavigationItem.TitleView?
我是否創建一個UIViewController w /關聯的nib文件,加載該nib,並將.view屬性分配給TitleView?基本上,我如何使用一個筆尖來佈置必要的元素,然後將結果視圖分配給TitleView屬性?
我有一個基於UINavigationController的屏幕序列。在其中一個屏幕上,我想用自定義TitleView替換標準標題。自定義視圖將使用一個nib文件創建,並且會有一個圖像和多個標籤。如何基於nib文件創建UINavigationItem.TitleView?
我是否創建一個UIViewController w /關聯的nib文件,加載該nib,並將.view屬性分配給TitleView?基本上,我如何使用一個筆尖來佈置必要的元素,然後將結果視圖分配給TitleView屬性?
考慮使用UINib - 它在iOS的4.0暴露。由於它爲你緩存筆尖,因此它的性能提高了一倍。
UINib *nib = [UINib nibWithNibName:@"TestView" bundle:nil];
UIView *myView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0]];
的objectAtIndex指筆尖頂層視圖 - 通常有一個(索引0),但如果有很多,你需要提供索引。
一旦你的觀點,你可以把它分配給navigationItem titleview的
self.navigationItem.titleView = myView;
[myview release];
編輯:
如果你需要去的NIB中的各個控件,把他們的標籤和訪問它們通過viewWithTag。在這裏看到:
http://useyourloaf.com/blog/2011/2/28/speeding-up-table-view-cell-loading-with-uinib.html
在界面生成器中創建自定義視圖&將其加載到視圖(或者您可以創建IBOutlet iVar以指向該視圖)。然後只需將titleView
設置爲您的自定義視圖。
UIView * customTitleView = [[[NSBundle mainBundle] loadNibNamed:@"TitleView" owner:self options:nil] lastObject];
self.navigationItem.titleView = customTitleView;
[customTitleView release];
你如何暴露控制,比如一個UILabel在筆尖,所以你可以在視圖設置中訪問這些和設定值? – ChrisP
如果您只有一個帶有一些控件的筆尖,這似乎可行。但是,如果你想公開一些包含的控件作爲屬性,你似乎需要一個視圖控制器。在這種情況下,您必須實例化視圖控制器,然後將視圖屬性分配給titleView。 – ChrisP
我編輯了這篇文章 - 不需要創建控制器。看我的編輯。 – bryanmac