1

我想解決如何設置故事板的自定義導航欄。我在應用程序中直接添加了導航欄到視圖控制器。設置故事板的自定義導航欄

VC並不直接位於導航控制器堆棧中,但會以原樣顯示。作爲應用程序的主要點。通過應用程序將使用相同的導航欄。

我想在整個應用程序中設置導航欄的樣式。以前我在導航控制器中使用了以下內容,但現在不是,因爲不需要,它們實際上不會保留在導航堆棧中。

[[UINavigationBar appearance] setBackgroundImage:portraitImage forBarMetrics:UIBarMetricsDefault]; 

什麼是正確的樣式這種方式現在它是一個項目簡單地添加到VC?酒吧也將被添加到其他風險投資者,所以它應該是可重用的。我曾嘗試過UINavigationBar的子類,並在導航欄的故事板中更改它,但不知道如何實現樣式。

我試圖改變這個子類的drawRect方法,但沒有發生變化。我無法直接從Apple找到任何文檔,以瞭解如何創建子類並添加樣式。

+1

外觀代理是如何設置導航欄的樣式。你在做什麼應該工作。 – memmons 2013-04-30 14:49:44

+1

在'didFinishLaunchingWithOptions'方法中的'AppDelegate.m'中使用你的代碼,這種方式可以將任何導航欄添加到任何vc – 2013-04-30 14:51:38

+1

注意:問題已解決,但我無法回答自己的問題或刪除此問題。 – StuartM 2013-04-30 16:22:47

回答

1

你可以嘗試這樣的:

[[UINavigationBar appearanceWhenContainedIn:[YourViewController1 class], 
              [YourViewController2 class], nil] 
         setBackgroundImage:[UIImage imageNamed:@"YourImageName"] 
           forBarMetrics:UIBarMetricsDefault]; 
+0

現在這是一個相當古老的問題,我們從這裏開始。但這是採取正確的方法,因此接受答案。 – StuartM 2014-05-01 12:28:44

2

好吧,我可以告訴你我什麼工作:

子類的導航欄和UINavigationController的太多,所以在它的initWithCoder你的setValue指派方式:forKey

- (id)initWithCoder:(NSCoder *)aDecoder { 
    if(!(self = [super initWithCoder:aDecoder])) return nil; 

    CDANavigationBar *navBar = [[CDANavigationBar alloc] init]; 
    [self setValue:navBar forKey:@"navigationBar"]; 

    return self; 
} 

在你的故事板分配UINavigationController給你自己的。

+0

所以哈克。不要這樣做。通過'UIAppearance'代理內置支持蒙皮控制。 – memmons 2013-04-30 14:56:55

+0

我想我堅持以前的方式。 – crisisGriega 2013-04-30 15:02:07

+0

以舊的方式做事沒什麼問題,但這是一種不受支持的方法,它很脆弱,隨時可能會中斷 - Apple不保證其任何屬性都符合關鍵值編碼。 – memmons 2013-04-30 16:09:40

2

在Xcode中5(和可能4),你可以在類的UINavigationController的UINavigationBar的更改爲自己的自定義類。然後根據需要在initWithCoder:中添加自定義項。