2012-04-03 22 views
3

我在iOS 5中設置了全球風格UIAppearance。這裏有一個例子:如何在設計UIAppearance時定位特定的UIViews?

[[UIbarButtonItem appearance] 
    setTtitletextAttributes:someStyle 
    forState:UIControlStateNormal 
]; 

它看起來不錯在大多數情況下:

enter image description here

但也有在全球風格長相醜陋,就像在電影播放的情況。

enter image description here

對於電影播放器​​,我寧願默認的藍色按鈕。那麼我該如何定位後退按鈕的外觀,而不是完成按鈕的外觀?我與定位普通表格單元格和分組表格單元格有類似的問題。

+0

是否有某種方式,你可以只是調用+外觀顯示的播放器之前,它被駁回後? – CodaFi 2012-04-03 01:03:02

+0

您可以嘗試在該類中創建UIBBarutton作爲customView,以便UIAppearence代理不會影響樣式。 – 2012-04-03 04:34:37

回答

-1

實際上,你可以更改代理只是針對某些觀點的層次結構。換句話說,當你想要定製的視圖被包含在某個視圖中時,你可以修改其外觀與其他視圖不同。因此,請先設置您的全局(白色)樣式,但隨後調用以下方法自定義按鈕出現在MPMoviePlayerController或其他任何位置的外觀。

[[UIBarButtonItem appearanceWhenContainedIn: 
     [MPMoviePlayerController class], nil] 
     setTitletextAttributes:someStyle 
     forState:UIControlStateNormal]; 

讓我知道這是否有幫助!

+0

與此消息失敗:***終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,理由是:「***的MPMoviePlayerController不符合UIAppearanceContainer協議」 – 2012-04-03 04:38:39

+0

很公平。看了文檔後,我意識到你必須使用一個實際符合UIAppearanceContainer協議的類,它只是UINavigationBar,UIButton等。但是同樣的想法仍然適用 – 2012-04-07 01:36:33

+0

除了你不能將這個想法應用到媒體播放器。請參閱http://openradar.appspot.com/11296843。 – an0 2012-04-22 20:51:42

6

您需要使用的UINavigationBar自定義子類。我們稱之爲MyNavigationBar。然後,你可以這樣做:

[[UIBarButtonItem appearanceWhenContainedIn:[MyNavigationBar class], nil] 
    setTintColor:[UIColor redColor]]; 

,它只是將你的導航欄,而不是MPMoviePlayerController的導航條內影響按鈕。

這個問題當然是UINavigationController總是使用基本的UINavigationBar ......如果你在代碼中創建它。但是,如果您在筆尖中創建它,則可以單擊其導航欄(在筆尖的文檔大綱中),然後在「標識」檢查器中更改該欄的類。

+0

我不使用Interface Builder。如何在我的應用程序中使用我的自定義子類來創建所有的'navigationBar'?我沒有明確地「分配」任何「導航欄」。 – JoJo 2012-04-03 04:56:30

+0

正如我所說的,「如果在代碼中創建它,UINavigationController總是使用基本的UINavigationBar。」。沒有公共的API來改變這一點。如果你想使用我的解決方案,你將需要與IB友好。別擔心,它不咬人。 – 2012-04-03 04:59:22

+1

這個答案是正確的,似乎是唯一的解決辦法。原來的提問者應該把這個標記爲正確的答案,因爲迪倫的錯誤。 – awolf 2012-07-14 00:19:43

4

如果你的AppDelegate你只是

[[UINavigationBar appearanceWhenContainedIn:[UINavigationController class], nil] 
setBackgroundImage:[UIImage imageNamed:@"navback"] forBarMetrics:UIBarMetricsDefault]; 

電影播放器​​取代

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navback"] 
            forBarMetrics:UIBarMetricsDefault]; 

將在全屏模式下正確的黑條。在作品的iOS 5和iOS 6

相關問題