如何在UIButton的标签子视图上设置alpha

时间:2017-06-07 18:40:16

标签: ios objective-c iphone swift uibutton

我想以编程方式为我的按钮标题设置多个对齐组合,如下所示: enter image description here 我发现这样做的最简单方法是添加两个UILabel作为我的自定义UIButton的子视图,并相应地设置自动布局约束。

但是,我无法弄清楚如何使我的标签的行为与按钮标题的行为方式相同(即,当按钮点击时,其标记会改变。)

我已尝试在.touchUpInside的目标操作方法中设置其alpha属性,但由于它们未附加到按钮状态,因此当用户结束点击时,它们不会将其alpha更改回正常状态按钮。

class Button: UIView {

var leftButton = UIButton(type: .roundedRect)
var rightButton = UIButton(type: .roundedRect)

init() {
    super.init(frame: .zero)
    createButton()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    createButton()
}

func createButton() {
    self.backgroundColor = UIColor.cyan
    self.layer.borderWidth = 0.5
    self.layer.borderColor = UIColor.blue.cgColor
    self.addSubview(leftButton)
    self.addSubview(rightButton)

    leftButton.setTitle("left", for: .normal)
    leftButton.setTitleColor(UIColor.black, for: .normal)
    leftButton.layer.borderColor = UIColor.yellow.cgColor
    leftButton.layer.borderWidth = 0.5
    leftButton.translatesAutoresizingMaskIntoConstraints = false
    leftButton.topAnchor.constraint(equalTo: self.topAnchor, constant: 0).isActive = true
    leftButton.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
    leftButton.trailingAnchor.constraint(lessThanOrEqualTo: rightButton.leadingAnchor).isActive = true
    leftButton.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true

    rightButton.setTitle("right", for: .normal)
    rightButton.layer.borderColor = UIColor.green.cgColor
    rightButton.layer.borderWidth = 0.5
    rightButton.setTitleColor(UIColor.black, for: .normal)
    rightButton.translatesAutoresizingMaskIntoConstraints = false
    rightButton.topAnchor.constraint(equalTo: self.topAnchor, constant: 0).isActive = true
    rightButton.leadingAnchor.constraint(greaterThanOrEqualTo: leftButton.trailingAnchor).isActive = true
    rightButton.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
    rightButton.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true

    leftButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
    rightButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
}

func buttonTapped() {
    print("button tapped")
}

3 个答案:

答案 0 :(得分:1)

有更好的方法。

选择两个按钮并将其保存在 stackView 中并进行必要的设置。

但请确保两个按钮指向相同的动作。因此,用户似乎实际上只有一个按钮。

这是输出。

enter image description here

我刚刚在故事板中做到了这一点。因为我使用stackView所以以编程方式创建和布局非常容易。我想你可以做到。 :)

停止闪烁:

将每个按钮类型设为自定义。

如何只为这两个按钮设置一个按钮操作?

查看此热门stack answer.

结果如下。

enter image description here

答案 1 :(得分:0)

您需要的是区分点击和保持以及释放按钮状态。幸运的是,我们可以使用两种内置的动作方法。

  • 触摸操作:点按此按钮即会调用此功能。因此,您可以在此处更改标签的字母。

  • Touch Up Inside:释放按钮后会调用此操作方法。所以你可以在这里重置你的alpha。

    v_size

enter image description here

答案 2 :(得分:0)

通过创建除UIButton之外的.custom(本例中我使用.roundedRect),设置了一个虚拟标题,我能够放置这两个标签并突出显示它们将子视图添加到按钮标题本身并按我的意愿设置其约束。它按预期工作。

代码:

class Button: UIView {

let button: UIButton
let leftLabel = UILabel()
let rightLabel = UILabel()

init() {
    button = UIButton(type: .roundedRect)
    super.init(frame: .zero)
    createButton()
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func createButton() {
    self.addSubview(button)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
    button.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
    button.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
    button.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true

    button.backgroundColor = UIColor.cyan
    button.layer.borderWidth = 0.5
    button.layer.borderColor = UIColor.blue.cgColor
    button.setTitle(" ", for: .normal)

    if let title = button.titleLabel {
        title.addSubview(rightLabel)
        rightLabel.text = "right"
        rightLabel.translatesAutoresizingMaskIntoConstraints = false
        rightLabel.topAnchor.constraint(equalTo: title.topAnchor).isActive = true
        rightLabel.leadingAnchor.constraint(greaterThanOrEqualTo: title.trailingAnchor).isActive = true
        rightLabel.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
        rightLabel.bottomAnchor.constraint(equalTo: title.bottomAnchor).isActive = true

        title.addSubview(leftLabel)
        leftLabel.text = "left"
        leftLabel.translatesAutoresizingMaskIntoConstraints = false
        leftLabel.topAnchor.constraint(equalTo: title.topAnchor).isActive = true
        leftLabel.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
        leftLabel.trailingAnchor.constraint(lessThanOrEqualTo: title.leadingAnchor).isActive = true
        leftLabel.bottomAnchor.constraint(equalTo: title.bottomAnchor).isActive = true
    }

    button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
}

func buttonTapped() {
    print("button tapped")
}