swift - 全局控制按钮外观

标签 swift swift3 uibutton formatting

我一直在尝试控制项目中所有按钮的外观。我创建了一个扩展并将其放在一个 ViewController 文件的顶部,以控制该 View 中所有按钮的外观。它很好用。在这里:

    import UIKit

    // EXTENSION TO CONTROL BUTTON APPEARANCE
    extension UIButton {
        func styleButton() {
            self.layer.cornerRadius = 8
            self.layer.borderWidth = 2
            self.layer.borderColor = UIColor.red.cgColor
        }
    }

    class DefaultSettingsVC: UIViewController, UITextFieldDelegate {
    ...
    // IN VIEWDIDLOAD :
         myButton1.styleButton()
         myButton2.styleButton()  //etc.

唯一的问题是我需要将它放在每个 ViewController 文件的顶部。 (我希望我在这里使用了正确的术语。)因此,我想我会创建一个全新的文件,它是 UIButton 的子类。这是整个文件的内容:

import UIKit

class ButtonStyle: UIButton {
    func styleButton() {
        self.layer.cornerRadius = 8
        self.layer.borderWidth = 2
        self.layer.borderColor = UIColor.red.cgColor
    }
}

但是现在呢?!当我尝试将它添加到我的 ViewController 文件中的 Class 行时,我收到“类的多重继承”错误。

class DefaultSettingsVC: UIViewController, UITextFieldDelegate, ButtonStyle {

我是不是完全走错了路?我应该以完全不同的方式来做这件事吗?任何帮助都会很棒。我的 Swift 专业知识只有 2.5 分(满分 5 分),所以我仍在学习,如果可以的话,我将不胜感激。

最佳答案

您不应该使用子类化来执行此操作。扩展是要走的路!如果你希望能够在不同的类中使用扩展,你应该尝试将它放在一个单独的文件中。由于您要扩展 UIButton 类,因此您希望它可以从任何地方访问。

看,ViewController 类:

class MyViewController: UIViewController {

    var button = UIButton()

    override func viewDidLoad() {
        super.viewDidLoad()
        button.styleButton(cornerRadius: 8, borderWidth: 2, borderColor: UIColor.red.cgColor)
    }
}

还有你的扩展文件:

extension UIButton {
    func styleButton(cornerRadius: CGFloat, borderWidth: CGFloat, borderColor: CGColor) {
        self.layer.cornerRadius = cornerRadius
        self.layer.borderWidth = borderWidth
        self.layer.borderColor = borderColor
    }
}

我稍微调整了一下,现在您可以设置所需的参数,以备日后需要以不同方式设置某些按钮的样式。在我看来,它更可重用,因此更有用。

关于swift - 全局控制按钮外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43056708/

相关文章:

ios - 如何使用 CoreData 实例化 UIHostingController?

ios - NSPredicate 查找具有相同标签形式的 UIView self.view.subviews Swift

ios - UITabBarItem 只显示没有图像的文本?

对包含可选的任何值进行 Swift 3 协议(protocol)转换

ios - Swift 3 中的 Wikitude 实例

ios - Scenekit 检测用户点击的对象

ios - 隐藏按钮操作不会改变问题

objective-c - 子类化 UIButton 但无法访问我的属性

Swift UIButton BarButtonItem 中图像大小扭曲

ios - Swift 3 - 从 xib 加载的 UITableViewCell - 自动布局和高度不正确