- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用我自己的名为 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/
我在设置图像时遇到问题。当从 imagePickerController 中获取图像时,我有一个代表告诉我。它将它发送到所有者 Controller ,然后我尝试在另一个 Controller 上设置
我需要使用线程来从网络检索图像并将其分配到 ImageView 中。 我对 NSOperation 进行了子类化,并从我的 View Controller 中调用它,如下所示: NSOperation
我有以下代码,当我调用此方法时,尽管资源中有图像,但它不会更改按钮的图像。 -(void)changeButton:(NSString*)button withURL:(NSString*)url {
我对这门语言完全陌生,我正在尝试了解 ImageIcon 的工作原理。我在子类中有一个方法,我想根据 switch 语句返回一个 ImageIcon。我遇到的唯一问题是我似乎无法让 .setImage
我有一个以编程方式创建的 UIImageView ([[UIImageView alloc] init])。应用程序的内存一直受到检查,直到 setImage:方法被调用。有什么想法吗? 最佳答案 我
我在代码中创建了两个UIImageView: UIImageView *background = [[UIImageView alloc]initWithFrame:CGRectMake(150, 6
我通过一个非常简单的函数遇到了内存泄漏问题。这是我的代码: -(void) drawPuzzle { gameView.image=nil; UIGraphics
我正在使用 setImage() 在 UIButton 上设置图像,但它不会立即更改图像。要显示图像,我需要再次单击该按钮或其他按钮。如何解决这个问题? block.setImage(UIImage(
我已经使用 setImage 来描述当前图像的状态,但我想在 setImage() 中同时使用两个状态。所以我想合并两个状态 .Highlighted & .Selected button.setIm
我正在编写一个音调生成器 UI,每次生成器开始生成和完成生成时,我都需要更改 UIImageView 图像。为此,我有 @property (weak, nonatomic) IBOutlet UII
我有一个类,其中有两个 UIImageView。在 if control 之后我正在设置这些 ImageView 的图像,但它没有设置。 我正在调用另一个类的方法。 我的代码如下, @synthesi
使用此代码设置按钮图像时出现问题: button.setImage(#imageLiteral(resourceName: "flight_deselect")**.changeToLightGray
我正在尝试制作自己的自定义 Facebook 登录按钮。我很接近,但出于某种原因,当我在 UIButton 上设置图像时,它仍然有一个非常大的框架,将文本推到右边,图标也推到右边。 我错过了什么?我尝
我正在尝试让 tesseract 在 python 中运行: ...image is a numpy array (uint8)... tessApi = tesseract.TessBaseAPI(
我正在使用 andEngine 为 Android 开发游戏。我必须动态更改 Sprite 图像。在 J2ME 中,我使用了 sprite.setImage("img.png"); 但是在andeng
我正在尝试使用 CMFCButton 中的函数 SetImage 为我的按钮加载位图。我没有得到任何错误或其他东西,只是一个普通的按钮。我正在对 icons 做同样的事情并且它有效,但我也需要它来加载
我用 ffmpeg 实现了一个视频播放器。每一帧都解码成功,可以保存为有效的jpg文件,在模拟器中运行时可以显示在UIImageView中。但是,当我在模拟器中运行我的应用程序时,内存会无限增长。此外
这个问题完全难住了我。这是适用于带有 Xcode 4.2 的 iOS 5.0 发生的事情是,在我的应用程序中,我让用户从他们的相册中选择图像,并将这些图像保存到应用程序文档目录中。非常简单。 然后我所
我正在尝试使用以下方法从本地 URL 加载图像: UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:fileU
一直在寻找这个问题的解决方案已经无数个小时了。问题其实很简单。我在 nib 中有一个 UIImageView,我正在从互联网加载图像并使用该图像设置 UIIImageView。我正在释放 viewCo
我是一名优秀的程序员,十分优秀!