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

标签 swift uibutton swift-extensions

我想创建一个全局函数,它影响所有 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
    }

}

最佳答案

您正在做的事情很棒,而且它确实适用于 UIButton 实例。但是没有必要返回任何东西。在扩展中,self 按钮。所以它只能改变自己。

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

您现在可以在任何 UIButton 实例上调用changeUIButtonBorder

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

但是,没有神奇的方法可以向所有 UIButton 广播他们应该调用该方法;你必须一次处理一个。

正如@Sh_Khan 所建议的那样,“神奇”的方法是制作一个 UIButton 子类,该子类在其自己的初始化程序中调用 changeUIButtonBorder 。然后,您只需确保所有按钮都是该子类的实例。

例如,这里有一个始终为红色的 UIButton 子类(假设所有实例都来自 Storyboard):

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

关于swift - 如何创建影响所有或特定 UIButton 实例类型的全局函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51412479/

相关文章:

iphone - 单击 UIButton 时从一个 UIViewController 重定向到另一个 UIViewController

swift - 如何在 Eureka SelectableSection 上进行适当的响应式(Reactive)扩展

ios - 是否可以在同一个应用程序中同时运行 AFNetworking 和 Alamofire?

swift - 当对象不再在相机框架中时,如何删除 ARReferenceObject Anchor?

ios - 如何通过实例调用类的静态函数

ios - UIButton 的 .touchUpInside 事件不起作用

ios - MusicPlayerSetPlayRateScalar 导致 __psynch_mutexwait 挂起/卡住

swift - 使用委托(delegate)更改带有按钮的 tableViewCell 内 UITextField 的值

swift - 尝试扩展 IntegerType(和 FloatingPointType);为什么不能将所有 Int 类型都转换为 NSTimeInterval

ios - 如何为多个类 Swift 进行扩展