2015-10-13 64 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不再处理它。因为它说,在苹果的文档:

酒吧按钮项通过此方法创建不调用其目标的行动 方法来响应用户交互。相反, 酒吧按钮项目期望指定的自定义视图来处理任何用户 交互并提供适当的响应。

相关问题