【问题标题】:Add NSAttributedString to UIBarButtonItem将 NSAttributedString 添加到 UIBarButtonItem
【发布时间】:2015-10-13 17:48:12
【问题描述】:

我正在尝试在我的后栏按钮项上设置属性字符串。
这是我第一次尝试属性字符串。
代码如下:

    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,动作: 字符串)'

有人知道如何做到这一点吗?谢谢。

【问题讨论】:

    标签: swift uibarbuttonitem nsmutableattributedstring


    【解决方案1】:

    您不能直接将属性字符串设置为UIBarButtonItem。您必须为其标题设置一个普通字符串,然后为标题设置属性:

    let barButtonBackStr = "< Back"
    let attributes: [NSAttributedString.Key : AnyObject] = [.font : UIFont(name: "AmericanTypewriter-Bold", size: 18)!]
    let newBackButton = UIBarButtonItem(title: barButtonBackStr, style: .plain, target: self, action: "barButtonBack:")
    newBackButton.setTitleTextAttributes(attributes, for: .normal)
    navigationItem.leftBarButtonItem = newBackButton
    

    这种方法有一个警告:您不能为属性设置范围。要么全有,要么全无。

    要为必须创建UILabel 的属性定义范围,请将属性字符串设置为其attributedText 属性,然后使用自定义视图创建UIBarButtonItem

    let barButtonBackStr = "< Back"
    let attributedBarButtonBackStr = NSMutableAttributedString(string: barButtonBackStr as String)
    attributedBarButtonBackStr.addAttribute(NSAttributedString.Key.font,
        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 不再处理它。正如苹果文档中所说:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-24
      • 2011-06-18
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      相关资源
      最近更新 更多