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 在点击时更改背景(以编程方式)的主要内容,如果未能解决你的问题,请参考以下文章
Objective C-以编程方式插入UIButton的标题,在选中时更改背景和标题颜色