更改工具栏按钮

时间:2017-01-30 14:21:50

标签: ios swift3 uibarbuttonitem uitoolbar

我在运行期间尝试更改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!)
}

这是我想要更改按钮'状态'开 - 关

的地方
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的网站上看过,有人可以确认一下吗?

有默认图像和选定的图像。

unselected

selected

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

1 个答案:

答案 0 :(得分:0)

所以我找到了解决方案,这很简单,但不容易找到。

如果您想在工具栏中添加彩色图标/图片,当您添加图片时,请不要忘记将渲染模式属性设置为始终原创。

现在,修正后的代码应为:

//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:)))

希望有所帮助