我可以更改 Swift 应用程序中所有按钮的属性吗?

Can I change the properties of all the buttons in my Swift app?

我有一个 Swift 应用程序,它在许多视图控制器中导航,所有视图控制器都具有相似的外观。每个视图控制器中都有我没有为其创建 IBOutlet 属性的按钮(它们都只是通过 Interface Builder 触发 segues)。

有没有一种简单的方法可以更改应用中所有按钮的背景颜色或文本颜色,而无需为 IB 中的每个按钮更改它,或为每个按钮创建 IBOutlet?

以下是可以简化事情的基本步骤,在您的情况下,必须对每个 viewController 重复此步骤。

  1. 为所有按钮创建一个出口:

    @IBOutlet var myButtons: [UIButton]!
    
  2. 将此出口与视图上的每个按钮连接(拖动)。单击界面中的每个按钮,然后在 connections inspector 中找到 "Referencing Outlet Collections"(圆圈中带有箭头的最后一个按钮)。请注意,它们都应该链接到 myButtons.

  3. 在 for 循环中设置按钮样式:

    for button in self.myButtons {
        button.backgroundColor = UIColor.clearColor()
        button.layer.borderWidth = 1
        button.layer.borderColor = UIColor.greenColor().CGColor
    }
    

为了扩大这项工作的应用范围,您有几个选项可以调查。你可以使用常量,所以至少当你想改变样式时,你只需要修改一个文件:Constants in Objective-C, Global constants file in Swift.

或者,有几种方法可以创建函数 public。我将尝试获取一些示例代码,但是一个名为 buttonStyle 的 class 可能对每个 viewController 很重要,并在 for 循环中调用:[buttonStyle styleButton:button]styleButton 函数将设置样式(我还没有为此测试过任何东西)。

查看@zisoft的回答:,日志比较详细!。

转到您的 appDelegate,然后更改(这只会更改文本颜色):

let buttonAppearance = UIButton.appearance()
    buttonAppearance.tintColor = UIColor(red: 1.0, green:1.0, blue:1.0, alpha:1.0)

这将为所有按钮指定所需的文本颜色。 你可以对 navigationBar、tabBar 等做同样的事情....