2015-10-13 62 views
3

我正試圖在我的back bar按鈕項上設置一個屬性字符串。
這是我第一次嘗試歸因於字符串。
下面是代碼:將NSAttributedString添加到UIBarButtonItem

self.navigationItem.hidesBackButton = true 
    let barButtonBackStr = "< Back" 
    var attributedBarButtonBackStr = NSMutableAttributedString(string: barButtonBackStr as String) 
    attributedBarButtonBackStr.addAttribute(NSFontAttributeName, 
     value: UIFont(
      name: "AmericanTypewriter-Bold", 
      size: 18.0)!, 
     range: NSRange(
      location:0, 
      length:1)) 
    let newBackButton = UIBarButtonItem(title: attributedBarButtonBackStr, style: UIBarButtonItemStyle.Plain, target: self, action: "barButtonBack:") 
    self.navigationItem.leftBarButtonItem = newBackButton 

這導致在Xcode以下錯誤。

不能調用類型 '的UIBarButtonItem' 初始化與類型的參數 列表 '(標題:NSMutableAttributedString,風格: UIBarButtonItemStyle,目標:CombatOutcomeViewController,動作: 字符串)'

任何人有如何做到這一點的想法?謝謝。

回答

9

您無法直接將屬性字符串設置爲UIBarButtonItem。你必須爲標題設置一個正常的字符串其標題,然後設置屬性:

let barButtonBackStr = "< Back" 
let attributes: [String: AnyObject] = [NSFontAttributeName: UIFont(name: "AmericanTypewriter-Bold", size: 18)!] 
let newBackButton = UIBarButtonItem(title: barButtonBackStr, style: UIBarButtonItemStyle.Plain, target: self, action: "barButtonBack:") 
newBackButton.setTitleTextAttributes(attributes, forState: .Normal) 
navigationItem.leftBarButtonItem = newBackButton 

這種方法有一個警告:你不能設置一個範圍的屬性。這是全部或沒有。

要定義你要創建一個UILabel屬性的範圍內,一個屬性串設置爲其attributedText屬性,然後創建一個UIBarButtonItem使用自定義視圖:

let barButtonBackStr = "< Back" 
let attributedBarButtonBackStr = NSMutableAttributedString(string: barButtonBackStr as String) 
attributedBarButtonBackStr.addAttribute(NSFontAttributeName, 
    value: UIFont(
     name: "AmericanTypewriter-Bold", 
     size: 18.0)!, 
    range: NSRange(
     location:0, 
     length:1)) 
let label = UILabel() 
label.attributedText = attributedBarButtonBackStr 
label.sizeToFit() 
let newBackButton = UIBarButtonItem(customView: label) 
self.navigationItem.leftBarButtonItem = newBackButton 

當你想用這種方法您必須知道您必須將目標和操作設置爲自定義視圖,因爲UIBarButtonItem不再處理它。因爲它說,在蘋果的文檔:

酒吧按鈕項通過此方法創建不調用其目標的行動 方法來響應用戶交互。相反, 酒吧按鈕項目期望指定的自定義視圖來處理任何用戶 交互並提供適當的響應。

相關問題