gpt4 book ai didi

ios - Swift UIButton 覆盖,setImage 不工作

转载 作者:可可西里 更新时间:2023-10-31 23:56:33 34 4
gpt4 key购买 nike

我正在尝试使用我自己的名为 FlipsSendButton 的按钮类对 UIButton 进行子类化。下面列出了此类的代码。在其中您可以看到我正在调用 setImage 来尝试设置按钮图像。但是,编译后,除了设置 ImageView 外,一切正常。

我是否在我的代码中遗漏了一些设置图像的步骤,或者可能错误地调用了可选和展开运算符?

import Foundation

class FlipSendButton : UIButton {

let bgColor : UIColor

init(frame aFrame: CGRect, bgColor aColor: UIColor) {
bgColor = aColor;

super.init(frame: aFrame)

addTarget(self, action: Selector("buttonTouched:"), forControlEvents: .TouchUpInside)
backgroundColor = aColor;

setImage(UIImage(named: "flips.png") as UIImage?, forState: .Normal)
}

required init(coder aDecoder: NSCoder) {
bgColor = UIColor.lightGrayColor()
super.init(coder: aDecoder)
}

func buttonTouched(sender: UIButton) {
if backgroundColor == UIColor.lightGrayColor() {
backgroundColor = bgColor
} else {
backgroundColor = UIColor.lightGrayColor()
}
}
}

此外,值得一提的是,图像 flips.png 位于我的 images.xassets 文件夹中,如果这会产生影响的话。

最佳答案

您忘记了 buttonType 属性。此外,您最好不要子类化 UIButton(查看 this 了解原因)。

相反,您应该在初始化按钮时将 buttonType 属性设置为 UIButtonTypeCustom,一些示例代码:

var myButton = UIButton.buttonWithType(.UIButtonTypeCustom)
myButton.setImage(UIImage(named: "flips.png") as UIImage?, forState: .Normal)

myButton.addTarget(self, action: Selector("buttonTouched:"), forControlEvents: .TouchUpInside)

func buttonTouched(sender: UIButton) {
if sender.backgroundColor == UIColor.lightGrayColor() {
sender.backgroundColor = bgColor
} else {
sender.backgroundColor = UIColor.lightGrayColor()
}
}

-- 编辑--

如果要复用样式配置,更好的方法是定义自己的UIButton工厂方法。像这样的东西:

import Foundation
import UIKit
import ObjectiveC

private var bgColorKey: UInt8 = 0

extension UIButton {

var bgColor: UIColor {
get {
return objc_getAssociatedObject(self, &bgColorKey) as! UIColor
}
set (neewColor) {
objc_setAssociatedObject(self, &bgColorKey, neewColor, .OBJC_ASSOCIATION_RETAIN)
}
}

class func buttonWithFrame(f: CGRect, backgroundColor color: UIColor) -> UIButton {
let button = UIButton(type: .Custom)
button.frame = f
button.backgroundColor = color;
button.bgColor = color
button.setImage(UIImage(named: "flips.png") as UIImage?, forState: .Normal)
button.addTarget(button, action: "buttonTouched:", forControlEvents: .TouchUpInside)
return button
}

func buttonTouched(sender: UIButton) {
if sender.backgroundColor == UIColor.lightGrayColor() {
sender.backgroundColor = sender.bgColor
} else {
sender.backgroundColor = UIColor.lightGrayColor()
}
}
}

然后你可以像这样使用按钮:

var btn = UIButton.buttonWithFrame(CGRectMake(50, 50, 100, 50), backgroundColor: UIColor.greenColor())
self.view.addSubview(btn)

关于ios - Swift UIButton 覆盖,setImage 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30857542/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com