3

我有一個選項卡式應用程序,其中包含導航控制器的選項卡和視圖控制器。他們都使用相同的導航控制器導航欄:後退按鈕+徽標圖像。目前,我把這個代碼放在每個視圖控制器中:如何爲所有導航控制器和視圖控制器設置自定義導航欄(標題+ titleView)?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.navigationItem.title = @"Back"; 
    UIImage *headerImage = [UIImage imageNamed:@"Logo.png"]; 
    self.navigationItem.titleView = [[[UIImageView alloc] initWithImage:headerImage] autorelease]; 
} 

恕我直言,這不是最好的方式來做到這一點。我想爲UIViewController使用一個類別,並且重寫viewDidLoad方法,但是每個視圖控制器都有一些額外的代碼在viewDidLoad中執行,所以我認爲重寫不是解決方案。其他方式是什麼?

+0

你定位到iOS 5?在iOS中,您可以全局設置這些值(例如,在您的appDelegate中)。 –

+0

目前,NOP :)但請讓我知道該怎麼做,在iOS 5中...... – Centurion

+1

看看UIAppearance:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAppearance_Protocol /Reference/Reference.html我寫了一個小例子作爲答案。請讓我知道這對你有沒有用。 –

回答

7

您可以創建一個UIViewController,MyViewControllerWithBackButtonAndLogo(您可以想出一個更好的名稱)的子類,然後執行viewDidLoad來設置導航項目。讓所有的視圖控制器繼承這個基類。然後確保視圖控制器在其自己的實現中調用[super viewDidLoad]

另請注意,要設置後退按鈕標題,您不應更改導航項目的title屬性,但應設置合適的backBarButtonItem

+0

這是一個非常聰明的答案 - 我希望我能想到它,哈哈!總的來說,我認爲這只是解決方法,但根本不是一件好事。我個人喜歡做的就是能夠將這些自定義與特定的導航控制器相關聯,以便堆疊中的所有視圖都可以添加。我覺得這應該屬於導航管理員的職責範圍內,但我可能不太瞭解該課程......無論如何,謝謝你! – SilithCrowe

+0

是否可以在UITableViewController和UIViewController的子類中實現相同的viewDidLoad方法?所以,所有的控制器(視圖和表格)都將具有相同的導航欄。 – JastinBall

相關問題