更改工具栏按钮

Change Toolbar Button

我在运行时尝试更改 UIBarButtonItem 类型的工具栏按钮时遇到了困难。

我已经为给定的文本视图以编程方式创建了一个工具栏,我想在按下按钮时更改按钮图像,就像它有打开图像和关闭图像一样。

我来解释一下:

这里我创建了带有所需按钮的工具栏

func configureToolbar(forTextView textView: UITextView) {

    toolbar?.barStyle = UIBarStyle.default
    toolbar?.items = [
        UIBarButtonItem.init(image: UIImage.init(named: "bold_unselected"), style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.didTapBold(sender:))),
        UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil),
        UIBarButtonItem(title: "Italic", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.didTapItalic(sender:))),
        UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil),
        UIBarButtonItem(title: "Underline", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.dismissKB))]
    toolbar?.sizeToFit()

    for (index,item) in (toolbar?.items?.enumerated())! {
        item.tag = index
    }

    // Adds a view as a upper border line
    let border = UIView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 0.5))
    border.backgroundColor = UIColor.lightGray
    toolbar?.addSubview(border)

    // Configures the toolbar
    toolbar?.backgroundColor = UIColor.white
    toolbar?.barTintColor = UIColor.white
    toolbar?.tintColor = UIColor.black
    toolbar?.clipsToBounds = true

    // Adds to the super view;
    textView.inputAccessoryView = toolbar
}

加粗按钮功能

func didTapBold(sender: UIBarButtonItem) {

    typeface.isBold = typeface.isBold! ? false : true // true -> false -> true
    toggleButton(button: sender, status: typeface.isBold!)
}

这是我要更改按钮的位置 'status' ON - OFF

func toggleButton(button: UIBarButtonItem, status: Bool) {
    // changes the button appearance
    switch button.tag {
    case 0:
        print("bold")
        print("status \(status)")
        if status {
            button.image = UIImage.init(named: "bold_selected")
        } else {
            button.image = UIImage.init(named: "bold_unselected")
        }

    case 2:
        print("bla bla bla")

    case 4:
        print("bla bla bla 2")

    default:
        print("default value called")
    }
}

由于某些原因,我无法将图片更改为我想要的图片,但我可以更改为另一张图片。

我已经阅读了人机界面指南,但找不到推荐的工具栏图像大小,但搜索后我在一些网站上看到是 20x20,有人可以确认吗?

有默认图片和选择图片。

更新 不知何故,我似乎无法向工具栏添加任何彩色 icon/image。刚刚尝试添加一个不同的图标,它只是显示为一个黑点。

所以我找到了解决方案,它非常简单但不容易找到。

如果您想向工具栏添加彩色 icons/images,在添加图像时不要忘记将渲染模式 属性 设置为始终原始。

Se 更正后的代码现在应该是:

//when setting the toolbar icons
toolbar?.items = [UIBarButtonItem.init(image: UIImage.init(named: "bold_unselected")?.withRenderingMode(.alwaysOriginal), style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.didTapBold(sender:)))]

或者将您的图像实例化为

let img = UIImage(named: "image").withRenderingMode(.alwaysOriginal)
let barBtnItm = UIBarButtonItem.init(image: img, style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.didTapBold(sender:)))

希望对您有所帮助