UIButton 色调颜色不适用于整个按钮?设置在故事板中?

问题描述 投票:0回答:5

我已经查看了其他问题,但找不到明确的答案 - 我在故事板中创建了 UIButton(不是以编程方式),并且我试图在单击时为整个按钮(而不仅仅是文本)着色。我已将色调颜色设置为黑色,但这不会影响整个按钮。

我尝试将类型设置为系统,因为我听说这会影响它,但没有任何改变。还是没有调色。

此外,即使按钮单击注册,我也必须非常“用力”触摸/单击(如果在设备上,则真正按下)才能触发影响按钮上文本的色调颜色。

按钮的操作函数将被调用,因此它不会影响功能,但文本“突出显示状态”似乎只有在用户非常用力点击时才会触发。

如何为整个按钮着色?为什么突出显示的状态只有在真正用力点击时才会触发?

设置色调颜色 -

enter image description here

尝试用IBOutlet实现:

@IBOutlet var postBtn: UIButton!
postBtn = customButton()
        postBtn.highlightedColor = UIColor.blueColor()

在新文件中创建自定义类后:

public class customButton: UIButton {
    public var highlightedColor = UIColor.blueColor()
    public var unhighlightedColor = UIColor.clearColor()
    override public var highlighted: Bool {
        didSet {
            if (highlighted) {
                self.backgroundColor = UIColor.blueColor()
            }
            else {
                self.backgroundColor = UIColor.clearColor()
            }

        }
    }

}

如果我最初将 postBtn 声明为

customButton()
,我要么会收到错误的访问错误,要么被告知 postBtn 没有名为 displayedColor 的成员。我做错了什么?

ios swift uibutton
5个回答
13
投票

tint
属性设置按钮图像和文本的颜色。

由于按钮上没有任何图像,它只会影响文本的颜色

此外,当您将按钮类型设置为除

tint
之外的任何类型时,
custom
只会影响按钮图像的颜色。

enter image description here

例如,我们要将按钮图像的颜色设置为红色。

enter image description here

然后我们会看到:

enter image description here

在您的情况下,您实际上想在按钮突出显示时设置 UIButton 的背景颜色和标题颜色。

标题颜色可以直接使用

button.setTitleColor(UIColor.whiteColor(), forState: .Highlighted)

对于背景颜色,没有可以使用的直接方法,但您可以创建一个自定义 UIButton 来覆盖 UIButton 的

highlighted
属性或使用
setBackgroundImage:forState:

自定义 UIButton

public class customButton: UIButton {
    public var highlightedColor = UIColor.blueColor()
    public var unhighlightedColor = UIColor.clearColor()
    override public var highlighted: Bool {
        didSet {
            if (highlighted) {
                self.backgroundColor = UIColor.blueColor()
            }
            else {
                self.backgroundColor = UIColor.clearColor()
            }

        }
    }

}

用途:

let button1 = customButton()
let button2 = customButton()

button1.highlightedColor = UIColor.redColor()
button2.highlightedColor = UIColor.blueColor()
button1.unhighlightedColor = UIColor.clearColor()
button2.unhighlightedColor = UIColor.blackColor()

设置背景图像:forState:

实现您想要的效果的另一种方法是使用

setBackgroundImage:forState:
。您可能需要先从
UIImage
创建一个
UIColor

从 UIColor 生成图像:

func getImageWithColor(color: UIColor, size: CGSize) -> UIImage {
    let rect = CGRectMake(0, 0, size.width, size.height)
    UIGraphicsBeginImageContextWithOptions(size, false, 0)
    color.setFill()
    UIRectFill(rect)
    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
}

用途:

button1.setBackgroundImage(getImageWithColor(UIColor.redColor(), size: button1.bounds.size), forState: .Highlighted)
button2.setBackgroundImage(getImageWithColor(UIColor.blueColor(), size: button2.bounds.size), forState: .Highlighted)

0
投票

尝试这样,

1) 将 UIButton 类型设置为 Storyboard 中的

custom

然后像下面这样写,

为该按钮创建 IBoutlet,

@IBOutlet var btnSubmit : UIButton!

创建该按钮的点击事件,

@IBAction func btnSubmitClick(sender : UIButton)
{
    if(sender.selected == false)
    {
        self.btnSubmit.backgroundColor = UIColor.redColor()
        self.btnSubmit.selected = true
    }
    else
    {
        self.btnSubmit.backgroundColor = UIColor.blueColor()
        self.btnSubmit.selected = false
    }
}

这将改变整个按钮的背景颜色。希望这对你有帮助:)


0
投票

关于您的第一个问题,您需要在代码中执行此操作。色调仅影响文本。如果您希望更改背景颜色,则需要随着按钮状态的变化手动更改它。实现此目的的一种方法是子类化 UIButton 并在其上添加相关控制事件的目标/操作。在您的情况下,您会听

UIControlEventTouchDown
了解何时将背景颜色更改为您选择的“突出显示”颜色,并听
UIControlEventTouchDragExit
UIControlEventTouchUpInside
了解何时恢复到正常状态背景颜色。

如果您想节省时间,这里有一个现有的实现:https://github.com/TakeScoop/SwiftyButton


0
投票

斯威夫特3

对于任何以编程方式执行此操作的人:

var button = UIButton(type: .system)
button.tintColor = UIColor.blue

0
投票

var 按钮 = UIButton(类型:.system)

如果您使用maccatalyst的系统按钮样式,tintcolor或setTitleColor将无法自定义修改。

仅对于主按钮角色,系统蓝色将默认更改

button.role = .primary

© www.soinside.com 2019 - 2024. All rights reserved.