点击swift 3 iOS时UIButton没有动作
Posted
技术标签:
【中文标题】点击swift 3 iOS时UIButton没有动作【英文标题】:UIButton no action when click swift 3 iOS 【发布时间】:2017-04-12 07:18:25 【问题描述】:我的自定义 UIButton 有问题。添加目标时,单击时没有执行任何操作。我试图将函数移入 ViewController 类,更改选择器名称和类型,但徒劳无功。 有我的代码。希望您能够帮助我。 (等级制度) CustomButton → MenuButtonGroup → ViewController
import UIKit
class CustomButton: UIButton
/** vue 1 */
private let view1 = UIImageView()
/** vue 2 */
private let view2 = UIView()
/** couleur du bouton */
private var color = ""
/** décalage y pour le 3d */
private let relief = screenHeight*0.013
init(frame: CGRect, color: String)
super.init(frame: frame)
self.color = color
self.layer.cornerRadius = 10
//définir la couleur de l'ombre
switch color
case "red":
self.backgroundColor = shadowRedColor
case "green":
self.backgroundColor = shadowGreenColor
case "blue":
self.backgroundColor = shadowBlueColor
case "yellow":
self.backgroundColor = shadowYellowColor
default:
self.backgroundColor = shadowRedColor
mainColorView()
self.addSubview(view2)
self.addTarget(self, action: #selector(downAction), for: .touchDown)
self.addTarget(self, action: #selector(touchUp), for: .touchUpInside)
self.addTarget(self, action: #selector(touchUp), for: .touchUpOutside)
/** vue de couleur principale*/
func mainColorView()
view2.frame = CGRect(x: 0, y: -relief, width: self.frame.width, height: self.frame.height)
view2.layer.cornerRadius = 10
//définir la couleur de l'ombre
switch color
case "red":
view2.backgroundColor = redColor
case "green":
view2.backgroundColor = greenColor
case "blue":
view2.backgroundColor = blueColor
case "yellow":
view2.backgroundColor = yellowColor
default:
view2.backgroundColor = redColor
/** appuis sur le bouton */
func downAction(sender: UIButton)
print("prout")
UIView.animate(withDuration: 0.1, delay: 0, options: .curveEaseOut, animations:
self.view2.transform = CGAffineTransform(translationX: 0, y: self.relief)
)
/**relacher le bouton*/
func touchUp()
animUp()
/** animer le relachement du bouton*/
func animUp()
UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.3, options: .curveEaseInOut, animations:
self.view2.transform = CGAffineTransform.identity
)
required init?(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
将按钮添加到 MenuButtonGroup :
playButton = CustomButton(frame: CGRect(x: 0, y: 0, width: 300, height: 300), color: "green")
按钮显示在屏幕上,但没有任何操作。我试过bringSubviewToFront 但没有效果。
【问题讨论】:
你试过addTarget
吗?
是的,它在共享代码中。
【参考方案1】:
当您将所谓的view2
添加到您的UIButton
时,您将其设置为与按钮相同的大小:
view2.frame = CGRect(x: 0, y: -relief, width: self.frame.width, height: self.frame.height)
这意味着,view2
覆盖了下方的整个按钮,并吞下了按钮的触摸事件。执行以下操作:
view2.isUserInteractionEnabled = false
生活会很美好。
编辑:
查看您的项目后,很明显,您正在将此按钮添加到 UIImageView
作为子视图。问题还是一样的,默认情况下UIImageView
isUserInteractionEnabled
设置为false
。
因此,请确保在 MenuButtonGroup
的初始化程序中将其设置为 true
。
self.isUserInteractionEnabled = true
因此,请禁用 UIView
实例的用户交互,并启用 UIImageView
子类的用户交互。
生活会更美好。
【讨论】:
我想说它有效,但即使我没有将 view2 添加到我的视图和/或 isUserInteractionEnabled = false,该操作也不会发生 你能试试下载我的项目吗?可能是错误在其他文件中,只有 5 个小文件:(500ko) http://we.tl/rMCasf0f8e 当我将我的 CustomButton 添加到 ViewController 视图时,它就可以工作了。但是我的 CustomButton 在一个视图中,它被添加到 ViewController。我尝试将 isUserInteractionEnabled 添加到它,但仍然无法正常工作。但是感谢我们的进步! 非常感谢!我现在知道了。你救了我^^【参考方案2】:您分配的操作不正确。
您的操作声明是func downAction(sender: UIButton)
,但是您要添加func downAction()
。您需要像这样添加它:
self.addTarget(self, action: #selector(downAction(sender:)), for: .touchDown)
【讨论】:
@MatthieuBravo 可能view2
阻止了触摸。尝试为其添加操作。 view2.addTarget(self, action: #selector(downAction(sender:)), for: .touchDown)
.
仍然没有反应。我看不出问题出在哪里。
@MatthieuBravo 并分配了正确的操作。您的布局有问题 - 只有左上四分之一的按钮响应触摸。尝试点击左上角。
@MaxPevser 有了你的答案并点击左上角,我看不到任何动作。 view2 = UIButton, addTarget to view2, addTarget to CustomButton.
@MaxPevser 你能下载我的项目(500ko)吗? http://we.tl/rMCasf0f8e【参考方案3】:
尝试改变这一点:
init(frame: CGRect, color: String)
super.init(frame: frame)
self.color = color
self.layer.cornerRadius = 10
//définir la couleur de l'ombre
switch color
case "red":
self.backgroundColor = shadowRedColor
case "green":
self.backgroundColor = shadowGreenColor
case "blue":
self.backgroundColor = shadowBlueColor
case "yellow":
self.backgroundColor = shadowYellowColor
default:
self.backgroundColor = shadowRedColor
mainColorView()
self.addSubview(view2)
self.addTarget(self, action: #selector(downAction), for: .touchDown)
self.addTarget(self, action: #selector(touchUp), for: .touchUpInside)
self.addTarget(self, action: #selector(touchUp), for: .touchUpOutside)
到这里:
init(frame: CGRect, color: String)
super.init(frame: frame)
self.color = color
self.layer.cornerRadius = 10
//définir la couleur de l'ombre
switch color
case "red":
self.backgroundColor = shadowRedColor
case "green":
self.backgroundColor = shadowGreenColor
case "blue":
self.backgroundColor = shadowBlueColor
case "yellow":
self.backgroundColor = shadowYellowColor
default:
self.backgroundColor = shadowRedColor
mainColorView()
self.view2.addTarget(self, action: #selector(CustomButton.downAction), for: .touchDown)
self.view2.addTarget(self, action: #selector(CustomButton.touchUp), for: .touchUpInside)
self.view2.addTarget(self, action: #selector(CustomButton.touchUp), for: .touchUpOutside)
self.addSubview(view2)
编辑: 尝试从函数定义中删除发件人:UIButton:
func downAction()
print("prout")
UIView.animate(withDuration: 0.1, delay: 0, options: .curveEaseOut, animations:
self.view2.transform = CGAffineTransform(translationX: 0, y: self.relief)
)
EDIT2:
尝试将 view2 类型从 UIView()
更改为 UIButton()
【讨论】:
@MatthieuBravo 你确定你现在在添加目标后添加子视图吗? 没有变化,仍然没有反应。 是的,我确定,没有操作。 @MatthieuBravo 检查更新 没有任何变化以上是关于点击swift 3 iOS时UIButton没有动作的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 3 中突出显示(或点击)按钮时如何更改 UIButton 边框颜色?
当一个 UIButton 被点击时,你如何让它变大,然后使用 Swift 3 回到以前/正常的大小?