1

我有一個基於UINavigationController的屏幕序列。在其中一個屏幕上,我想用自定義TitleView替換標準標題。自定義視圖將使用一個nib文件創建,並且會有一個圖像和多個標籤。如何基於nib文件創建UINavigationItem.TitleView?

我是否創建一個UIViewController w /關聯的nib文件,加載該nib,並將.view屬性分配給TitleView?基本上,我如何使用一個筆尖來佈置必要的元素,然後將結果視圖分配給TitleView屬性?

回答

1

考慮使用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

+0

你如何暴露控制,比如一個UILabel在筆尖,所以你可以在視圖設置中訪問這些和設定值? – ChrisP

+0

如果您只有一個帶有一些控件的筆尖,這似乎可行。但是,如果你想公開一些包含的控件作爲屬性,你似乎需要一個視圖控制器。在這種情況下,您必須實例化視圖控制器,然後將視圖屬性分配給titleView。 – ChrisP

+0

我編輯了這篇文章 - 不需要創建控制器。看我的編輯。 – bryanmac

0

在界面生成器中創建自定義視圖&將其加載到視圖(或者您可以創建IBOutlet iVar以指向該視圖)。然後只需將titleView設置爲您的自定義視圖。

UIView * customTitleView = [[[NSBundle mainBundle] loadNibNamed:@"TitleView" owner:self options:nil] lastObject]; 
self.navigationItem.titleView = customTitleView; 
[customTitleView release];