自定义课程上的圆形按钮,带有UIAppearance

时间:2018-06-17 13:17:02

标签: ios swift uibutton uiappearance

我正在尝试使用UIAppearance()

在自定义类上应用样式
class MainStyleButton: UIButton {}

代码:

let buttonView = MainStyleButton.appearance()
buttonView.backgroundColor = Style.buttonColor
buttonView.layer.cornerRadius = 5
buttonView.layer.borderWidth = 5
buttonView.layer.borderColor = Style.buttonColor.cgColor

它适用于颜色,但遗憾的是不能使我的按钮变圆。我会很感激任何提示。 使用iOS 11.2在模拟器iPhone X,8上进行测试。

1 个答案:

答案 0 :(得分:0)

我尝试复制你的方法并设置一个按钮。我尝试使用您的代码在UIViewController期间viewDidLoad以及AppDelegate applicationDidFinishLaunching期间使用您的代码更改按钮的外观。我还测试了从默认类型.custom将按钮类型更改为.system。这些似乎都不起作用,我无法覆盖你不能用的相同属性。

Apple's docs我知道按钮类型定义了它的外观以及可以覆盖哪些外观属性:

  

按钮的类型定义其基本外观和行为。您可以使用init(type :)方法或在storyboard文件中在创建时指定按钮的类型。创建按钮后,您无法更改其类型。

我不知道为什么你感兴趣的属性在这一点上是不可改变的

但是我想提供一种我个人使用的不同方法,并允许您更改按钮外观。由于您已经定义了自定义类,因此定义角半径和其他您想要的属性要简单得多(或者您可以编写一个带有您可以随时调用的参数的样式函数,以便能够更改外观根据按钮的使用位置):

class MainStyleButton: UIButton {
  override func awakeFromNib() {
    layer.borderColor = Style.buttonColor.cgColor
    layer.borderWidth = 5
    layer.cornerRadius = 5
  }
}

或者您可以为系统按钮实例化/使用IBOutlet并执行此操作:

class MyViewController: UIViewController {
  @IBOutlet weak var myButton: UIButton!
  override func viewDidLoad() {
    super.viewDidLoad()
    // not necessary to do this is viewDidLoad, that's just my example
    myButton.layer.borderColor = Style.buttonColor.cgColor
    myButton.layer.cornerRadius = 5
    myButton.layer.borderWidth = 5
}