自定义UIButton setSelected奇怪的行为

时间:2015-07-12 12:16:05

标签: ios swift uibutton

我是swift的新手,我只想创建一个uibutton的子类。除非我选择按钮时出现这个奇怪的蓝色圆角矩形,如下所示。当我想要的只是一个漂亮的白色边框。

enter image description here

我班上的代码:

import UIKit
import QuartzCore

@IBDesignable
class ColorButton: UIButton {
    //MARK: PROPERTIES
    @IBInspectable var stickerColor: UIColor = UIColor.whiteColor() {
        didSet {
            configure()
        }
    }

    override var selected: Bool {
        willSet(newValue) {
            super.selected = newValue;
            if selected {
                layer.borderWidth = 1.0
            } else {
                layer.borderWidth = 0.0
            }
        }
    }

    //MARK: Initializers
    override init(frame : CGRect) {
        super.init(frame : frame)
        setup()
        configure()
    }

    convenience init() {
        self.init(frame:CGRectZero)
        setup()
        configure()
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
        configure()
    }


    override func awakeFromNib() {
        super.awakeFromNib()
        setup()
        configure()
    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        setup()
        configure()
    }

    func setup() {
        //Border color
        layer.borderColor = UIColor.whiteColor().CGColor
        //Corner Radius
        setUpCornerRadius()
    }

    func configure() {
        backgroundColor = stickerColor
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        setUpCornerRadius()
    }

    func setUpCornerRadius() {
        layer.cornerRadius = CGRectGetWidth(bounds) * 0.205
    }
}

1 个答案:

答案 0 :(得分:4)

我检查了你的代码。我也有同样的问题。

但是如果将按钮类型设置为自定义,则不会出现此问题 enter image description here

输出:

enter image description here

buttonType找到了一些东西:

您可能会发现CocoaBuilder的主题How to subclass UIButton?上的讨论很有帮助,尤其是Jack Nutting's suggestion to ignore the buttonType

  

请注意,这样buttonType没有显式设置为任何东西,   这可能意味着它是UIButtonTypeCustom。文件没有   似乎实际上指定了,但因为那是0中的值   枚举,这可能发生了什么(这似乎是可观察的   行为也是如此)

来源:https://stackoverflow.com/a/10278515/3202193