代码之家  ›  专栏  ›  技术社区  ›  Laurence Wingo

如何创建影响所有或特定UIButton实例类型的全局函数?

  •  0
  • Laurence Wingo  · 技术社区  · 7 年前

    我想创建一个全局函数,它要么影响所有的UIButton实例,要么只影响某些UIButton类型的实例,这些实例将更新角半径或边框属性我熟悉UIAppearances,但是我的客户希望有一个全局文件,在那里他们可以像CSS样式表一样动态更新更改到目前为止,我已经能够对UIColor和UIFont进行扩展,这些扩展返回特定的颜色和字体,但是我不知道这对于UIButton实例是如何工作的以下是我到目前为止的想法,但我认为这样做行不通:

    @objc extension UIButton {
    
        func changeUIButtonBorder() -> UIButton {
            self.layer.borderWidth = 3
            self.layer.borderColor = UIColor.white.cgColor
            return self
        }
    
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   matt    7 年前

    你做的很好,而且 为UIButton实例工作但没必要 返回 什么都行。在分机里, self 按钮。所以它可以改变自己。

    @objc extension UIButton {
        func changeUIButtonBorder() {
            self.layer.borderWidth = 3
            self.layer.borderColor = UIColor.white.cgColor
        }
    }
    

    你现在可以打电话了 changeUIButtonBorder 任何 uibutton实例。

    @IBOutlet var myButton : UIButton!
    override func viewDidLoad() {
        super.viewDidLoad()
        myButton.changeUIButtonBorder()
    }
    

    但是,没有神奇的方法可以让所有的uibutton调用该方法;您必须一次处理一个uibutton。

    “神奇”的方法是,正如@sh琰u khan所建议的,创建一个uibutton子类来调用 更改按钮顺序 在它自己的初始值设定项中 . 然后,您只需确保所有按钮都是该子类的实例。

    例如,这里有一个总是红色的uibutton子类(假设所有实例都来自故事板):

    class RedButton : UIButton {
        override func awakeFromNib() {
            super.awakeFromNib()
            self.backgroundColor = .red
        }
    }