我一直在尝试控制项目中所有按钮的外观。我创建了一个扩展并将其放在一个 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/