UIButton 在点击时更改背景(以编程方式)

Posted

技术标签:

【中文标题】UIButton 在点击时更改背景(以编程方式)【英文标题】:UIButton change background when tapped (programmatically) 【发布时间】:2018-07-30 09:52:58 【问题描述】:

我有一个自定义 UIButton,但我无法通过快速点击来更改背景或文本颜色。如果有什么效果,那就只能长按了:

    buton.isUserInteractionEnabled = true
    buton.setTitle("text_normal", for: .normal)
    buton.setTitle("text_highlighted", for: .highlighted)
    buton.setTitle("text_selected", for: .selected)
    buton.setTitle("text_focused", for: .focused)

按住按钮约 1 秒后,我能得到的唯一文本是“text_highlighted”。但是轻按一下什么都不会发生。

但动作触发正确:

let tap2 = UITapGestureRecognizer(target: self, action: #selector(handleTap))
buton.addGestureRecognizer(tap2)


@objc func handleTap(sender: UITapGestureRecognizer) 
    print("click")

我尝试了什么: 添加自定义

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
...

这也是稍后触发的。并且结合 tocuhesEnded 也不会暂时改变颜色(可能是太快了)。

我也不能使用 UIButton(type: .system) - 它不是系统样式的按钮。

与更改文本类似,这也不起作用:

    self.setTitleColor(UIColor.gray, for: .normal)
    self.setTitleColor(UIColor.yellow, for: .selected)
    self.setTitleColor(UIColor.yellow, for: .highlighted)
    self.setTitleColor(UIColor.yellow, for: .focused)

只有长按才能看到黄色。我正在寻找这样的东西,但它也需要快速点击。

自定义按钮正在修改 layoutSubviews(),但不是颜色。自定义按钮包含默认图像和标签。整个按钮有圆角。但总的来说那里没有什么特别的。

我没有使用任何故事板或 XIB - 一切都以编程方式在 Swift 4 中。 该按钮应该导致另一个 ViewController,但我想看到点击的即时反馈。类似于从情节提要创建时:https://youtu.be/lksW12megQg?t=3m25s - 现在甚至简单的 alpha 更改都不适合我。

【问题讨论】:

你为什么要添加UITapGestureRecognizer,按钮的工作是检测点击,所以不要覆盖任何东西,而是使用上面的设置标题和标题颜色为不同的状态和UIButton 将做剩下的 完全删除UITapGestureRecognizer 后还是一样 - 短按按钮不会修改文本或颜色。只有在像以前一样长按之后。现在该按钮上没有其他手势控制。 你在使用.custom类型按钮吗? 使用btn.setTitle("Ladi", for: .normal)btn.setTitle("Slav", for: .highlighted) 等设置的普通香草UIButton 将起作用...所以您必须在UIButton 子类中做一些事情以使其不起作用... 这是我现在的代码:let buton = UIButton() buton.setTitle("text1", for: .normal) buton.setTitle("text2", for: .highlighted) container.addSubview(buton) 但它是一样的 - 短按什么都不做,长按这样做可以更改为 text2。我唯一能看到的是我的主视图(容器)是滚动视图。 【参考方案1】:

如果按钮被选中,检查uibutton的isselected属性然后改变按钮的背景颜色

【讨论】:

这将永久更改颜色 - 我只想显示发生的点击(因为默认 UIButton 通过临时更改的 alpha 呈现它 - 这对我也不起作用)【参考方案2】:

Jen Jose 是对的 - 我的父类存在一个问题,它正在“吞噬”我的触摸。我在将它移动到不同的 ViewController 时确认了这一点 + 我遇到了与表相同的问题,它无法处理触摸事件 (https://***.com/a/9248827/1317362)

编辑:

准确地说,这个按钮在 UIScrollView 中。

添加scrollView.delaysContentTouches = NO; 完全解决了这个问题。

详情:https://***.com/a/16650610/1317362

【讨论】:

以上是关于UIButton 在点击时更改背景(以编程方式)的主要内容,如果未能解决你的问题,请参考以下文章

更改以编程方式创建的单击 UIButton 的背景图像

Objective C-以编程方式插入UIButton的标题,在选中时更改背景和标题颜色

如何更改以编程方式创建的一组 UIButton 的标题颜色?

ios工具栏中的UIButton

以编程方式创建的 UIButton 为目标

为啥不以编程方式快速更改 uibutton 标题?