3

我正在使用这样的 Swift 扩展@IBInspectable来设置边框颜色:UIButton

extension UIButton {
  @IBInspectable var borderWidth: CGFloat {
    get {
      return layer.borderWidth
    }
    set {
      layer.borderWidth = newValue
      layer.masksToBounds = newValue > 0
    }
  }
}

...但我也想拥有一个按钮状态的selectedBorderColor属性。.Selected像这样的扩展有可能吗?我是否必须以UIButton某种方式进行子类化并检查按钮状态?

extension UIButton {
  @IBInspectable var borderWidth: CGFloat {
    get {
      return layer.borderWidth
    }
    set {
      layer.borderWidth = newValue
      layer.masksToBounds = newValue > 0
    }
  }
  //This is what I want to do...
  @IBInspectable var selectedBorderWidth: CGFloat {
    get {
      return layer.borderWidth
    }
    set {
      layer.borderWidth = newValue
      layer.masksToBounds = newValue > 0
    }
  }
}

提前致谢。

4

1 回答 1

6

您可以UIButton像这样子类化:

class SBButton: UIButton {

    @IBInspectable var borderColor : UIColor = UIColor.whiteColor() {
        didSet {
            self.setNeedsDisplay()
        }
    }

    @IBInspectable var selectedBorderColor : UIColor = UIColor.blackColor() {
        didSet {
            self.setNeedsDisplay()
        }
    }

    override var selected: Bool {
        didSet {
            if selected {
                layer.borderColor = selectedBorderColor.CGColor
            } else {
                layer.borderColor = borderColor.CGColor
            }
        }
    }
}

并使用button.selected = true

于 2015-07-06T14:04:12.357 回答