【问题标题】:Programmatically create UIButton with default behavior以编程方式创建具有默认行为的 UIButton
【发布时间】:2019-05-22 19:49:17
【问题描述】:

有没有一种方法可以使用 swift 创建一个按钮,并让它使用在 Interface Builder 中拖出按钮时会看到的默认行为?

使用界面构建器创建一个按钮会为文本/标题提供默认的“这是一个交互式元素”蓝色,以及在触摸/点击它时颜色变亮的效果。

仅使用let myButton = UIButton() 快速创建按钮会将文本和背景颜色默认为白色(???)并且没有视觉活动指示。我发现您可以将每个按钮的标题颜色设置为 self.view.tintColor,但只是希望可能有更好的方法来“默认”它。

【问题讨论】:

  • 检查其他初始化方法:init(type:).
  • 除非您以编程方式覆盖UIButton,否则您的所有按钮都必须手动更改属性。或者您必须在每个视图中声明按钮的样式。您必须覆盖 Apple UIButton 的标准实现,这是一个带有蓝色文本的白色按钮。我不确定故事板上是否有办法做到这一点。
  • 我做错了什么吗?在我的示例中,我想要带有蓝色文本和默认交互指示的标准白色背景。相反,我在没有交互指示的情况下获得白色背景上的白色文本。我正在做一个简单的let myButton = UIButton()self.view.addSubview(myButton)

标签: swift


【解决方案1】:

在 Swift 中使用与使用 Interface Builder 相同的默认行为创建按钮的正确方法是使用 UIButton 的 init(type:) 方法,正如 Larme 评论的那样。

例子:

let btn = UIButton(type: .system)

这将创建一个带有标准蓝色文本和可视活动指示的按钮。

我找到了有关此类型以及您可以使用的其他 UIButton 类型的信息here

【讨论】:

    【解决方案2】:

    您可以继承 UIButton 并重新创建所有的触摸/标题颜色等。

    或者

    你可以创建扩展

    从这个链接找到一个扩展..

    how to set UIButton type in UIButton Subclass

    extension UIButton {
        static func createStandardButton() -> UIButton {
            let button = UIButton(type: UIButtonType.system)
            button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 16)
            button.setTitleColor(UIColor.black, for: .normal)
            button.setTitleColor(UIColor.gray, for: .highlighted)
            return button
        }
    }
    
    let button = UIButton.createStandardButton()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多