【发布时间】: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。我唯一能看到的是我的主视图(容器)是滚动视图。