2014-10-09 98 views
11

所以我寫這個程序有豐富多彩navigationbars並在這條標題的字體和UIBarButtonItems的字體應該是白色的,並在特定的字體。我用這兩條線來完成,在AppDelegate中..的Xcode 6.1 titleTextAttributes

UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : UIFont(name: "SourceSansPro-Regular", size: 22), NSForegroundColorAttributeName : UIColor.whiteColor()] 
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName : UIFont(name: "SourceSansPro-Regular", size: 22), NSForegroundColorAttributeName : UIColor.whiteColor()], forState: .Normal) 

但在Xcode 6.1我在每個線得到一個錯誤,我真的不知道,什麼手段..

enter image description here

文本屬性是[NSObject的:AnyObject] ?.這正是我寫下來的。有沒有人有這個解決方案?

回答

37

我認爲這個問題是因爲他們在6.1中更改了UIFont的初始值設定項,所以它可以返回nil。這是正確的行爲,因爲如果輸入錯誤的字體名稱,則無法實例化UIFont。在這種情況下你的字典變得[NSObject: AnyObject?]這是不符合[NSObject: AnyObject]相同。您可以先初始化字體,然後使用if let語法。這裏是如何做到這一點

let font = UIFont(name: "SourceSansPro-Regular", size: 22) 
if let font = font { 
    UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : font, NSForegroundColorAttributeName : UIColor.whiteColor()] 
} 

或者,如果你確定字體對象是不是會被nil可以使用隱式展開的可選語法。在這種情況下,您正冒着運行時崩潰的風險。這是如何做到這一點。

UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : UIFont(name: "SourceSansPro-Regular", size: 22)!, NSForegroundColorAttributeName : UIColor.whiteColor()] 
+0

沒錯,就是它!非常感謝你。我認爲這是一個初始者可以返回零,但它是有道理的非常混亂。:) – Ben 2014-10-09 08:27:23

+0

愛它謝謝! – 2015-01-10 02:16:17