bar Button Item text Will change when select in moonIcon like Font Awesome in swift 4
bar Button Item text Will change when select in moonIcon like Font Awesome in swift 4
我使用此代码在 navigationController
UIBarButtonItem
的应用程序中使用 moonIcon 字体,如字体 Awesome
let menuButton = UIBarButtonItem(title: publicSVGAssets().menu, style: UIBarButtonItemStyle.plain, target: self, action: #selector(menuAction))
menuButton.setTitleTextAttributes(NSDictionary(dictionary: [NSAttributedStringKey.font : UIFont(name: "icomoon", size: 25)!, NSAttributedStringKey.foregroundColor : UIColor.red]) as? [NSAttributedStringKey : Any], for: [])
self.navigationItem.rightBarButtonItem = menuButton
这会很好用但问题是当用户选择按钮时,图标会像下图一样改变
- 重新生成字体。
- 下载并复制正确的代码。
- 删除旧字体文件并向应用添加新字体文件 (.ttf)。
- 确保您已将字体添加到 info.plist 中的
Fonts provided by application
列表。
- 使用新代码。
setTitleTextAttributes(<#T##attributes: [String : Any]?##[String : Any]?#>, for: <#T##UIControlState#>)
let dictionary = [NSAttributedString.Key.font : UIFont(name: "icomoon", size: 25)!, NSAttributedString.Key.foregroundColor : UIColor.red]
menuButton.setTitleTextAttributes(dictionary, for: .normal)
menuButton.setTitleTextAttributes(dictionary, for: .disabled)
menuButton.setTitleTextAttributes(dictionary, for: .highlighted)
它可以像仅在按钮状态为 .normal
(如您指定)时应用字体属性一样简单。
您可能需要指定按钮的所有状态都应用这些标题文本属性,如下所示:
let title = publicSVGAssets().menu
let style = UIBarButtonItemStyle.plain
let selector = #selector(menuAction)
let menuButton = UIBarButtonItem(title: title, style: style, target: self, action: selector)
let font = UIFont(name: "icomoon", size: 25)
let attributesDictionary: [NSAttributedStringKey: Any]? = [NSAttributedStringKey.font: font!, NSAttributedStringKey.foregroundColor : UIColor.red]
menuButton.setTitleTextAttributes(attributesDictionary, for: .normal)
menuButton.setTitleTextAttributes(attributesDictionary, for: .selected)
menuButton.setTitleTextAttributes(attributesDictionary, for: .highlighted)
self.navigationItem.rightBarButtonItem = menuButton
点击按钮会改变它的状态。这可能就是为什么您在点击它时看到它会更改图标的原因。
注意:如果您需要在某些其他状态(例如 disabled
)显示按钮,您也需要为该状态分配这些相同的标题文本属性。
...例如:
menuButton.setTitleTextAttributes(attributesDictionary, for: .disabled)
(注意:这与@Satish 给出的答案类似)。
我使用此代码在 navigationController
UIBarButtonItem
的应用程序中使用 moonIcon 字体,如字体 Awesome
let menuButton = UIBarButtonItem(title: publicSVGAssets().menu, style: UIBarButtonItemStyle.plain, target: self, action: #selector(menuAction))
menuButton.setTitleTextAttributes(NSDictionary(dictionary: [NSAttributedStringKey.font : UIFont(name: "icomoon", size: 25)!, NSAttributedStringKey.foregroundColor : UIColor.red]) as? [NSAttributedStringKey : Any], for: [])
self.navigationItem.rightBarButtonItem = menuButton
这会很好用但问题是当用户选择按钮时,图标会像下图一样改变
- 重新生成字体。
- 下载并复制正确的代码。
- 删除旧字体文件并向应用添加新字体文件 (.ttf)。
- 确保您已将字体添加到 info.plist 中的
Fonts provided by application
列表。 - 使用新代码。
setTitleTextAttributes(<#T##attributes: [String : Any]?##[String : Any]?#>, for: <#T##UIControlState#>)
let dictionary = [NSAttributedString.Key.font : UIFont(name: "icomoon", size: 25)!, NSAttributedString.Key.foregroundColor : UIColor.red]
menuButton.setTitleTextAttributes(dictionary, for: .normal)
menuButton.setTitleTextAttributes(dictionary, for: .disabled)
menuButton.setTitleTextAttributes(dictionary, for: .highlighted)
它可以像仅在按钮状态为 .normal
(如您指定)时应用字体属性一样简单。
您可能需要指定按钮的所有状态都应用这些标题文本属性,如下所示:
let title = publicSVGAssets().menu
let style = UIBarButtonItemStyle.plain
let selector = #selector(menuAction)
let menuButton = UIBarButtonItem(title: title, style: style, target: self, action: selector)
let font = UIFont(name: "icomoon", size: 25)
let attributesDictionary: [NSAttributedStringKey: Any]? = [NSAttributedStringKey.font: font!, NSAttributedStringKey.foregroundColor : UIColor.red]
menuButton.setTitleTextAttributes(attributesDictionary, for: .normal)
menuButton.setTitleTextAttributes(attributesDictionary, for: .selected)
menuButton.setTitleTextAttributes(attributesDictionary, for: .highlighted)
self.navigationItem.rightBarButtonItem = menuButton
点击按钮会改变它的状态。这可能就是为什么您在点击它时看到它会更改图标的原因。
注意:如果您需要在某些其他状态(例如 disabled
)显示按钮,您也需要为该状态分配这些相同的标题文本属性。
...例如:
menuButton.setTitleTextAttributes(attributesDictionary, for: .disabled)
(注意:这与@Satish 给出的答案类似)。