如何在iOS中以最佳方式创建自定义按钮并多次使用?

时间:2016-07-16 16:37:56

标签: ios swift button

我在ios中创建了一个自定义UIButton。我想使用相同的自定义按钮十次具有相同的属性但不同的标题。如果不为每个按钮重复相同的代码,最有效和最聪明的方法是什么?它应该是结构,类还是别的什么?我该如何实现它?我为自定义按钮更改的属性如下:

 @IBOutlet weak var button_1: UIButton!

 button_1.frame = CGRectMake(0.0, 0.0, button_1.frame.width, button_1.frame.height)
 button_1.clipsToBounds = true
 button_1.layer.cornerRadius = button_1.frame.width/2.0
 button_1.layer.borderColor = UIColor.whiteColor().CGColor
 button_1.layer.borderWidth=2.0

4 个答案:

答案 0 :(得分:7)

您可以创建自己的类,其范围为UIButton

@IBDesignable
class MyOwnButton: UIButton {
     var borderWidth = 2.0
     var boderColor = UIColor.whiteColor().CGColor
     @IBInspectable
     var titleText: String? {
         didSet {
             self.setTitle(titleText, forState: .Normal)
             self.setTitleColor(UIColor.blackColor(), forState: .Normal)
         }
     }   

     override init(frame: CGRect){
         super.init(frame: frame)
     }

     required init?(aDecoder: NSCoder) {
         super.init(aDecoder: aDecoder)
     }

     override func layoutSubviews() {
         setup()
     } 

     func setup() {
         self.clipsToBounds = true
         self.layer.cornerRadius = self.frame.size.width / 2.0
         self.layer.borderColor = borderColor
         self.layer.borderWidth = borderWidth
     }

要为按钮设置文字,只需写下myButton.titleText = "myText"

然后,您可以从界面构建器中拖放UIButton,然后将该按钮的类更改为您自己的MyOwnButton,或者通过代码创建一个。

答案 1 :(得分:4)

您需要像这样extension创建UIButton

extension UIButton {
    class func attributedButton(frame: CGRect) -> UIButton {
        let button = UIButton(frame: frame)
        button.clipsToBounds = true
        button.layer.cornerRadius = button_1.frame.width/2.0
        button.layer.borderColor = UIColor.whiteColor().CGColor
        button.layer.borderWidth = 2.0
        return button 
    }
}

现在以这种方式调用此方法

let button = UIButton.attributedButton(frame: CGRectMake(20, 20, 10, 40)
button.setTitle("Title", forState: .Normal)
self.view.addSubview(button)

现在,每次要创建具有这些固定属性的按钮时,都可以使用此方法。

答案 2 :(得分:0)

问题作者标记了正确的答案(作者:准将),但是在swift 4中可能无法正常工作(也许在其他版本中,尚未检查)。 例如,当我设置按钮标题时,它不会在运行时显示。原因如下:它不称为super.layoutSubviews()。

正确的方法在这里:

@IBDesignable
class MyOwnButton: UIButton {
     var borderWidth = 2.0
     var boderColor = UIColor.whiteColor().CGColor
     @IBInspectable
     var titleText: String? {
          didSet {
             self.setTitle(titleText, forState: .Normal)
             self.setTitleColor(UIColor.blackColor(), forState: .Normal)
         }
     }   

     override init(frame: CGRect){
         super.init(frame: frame)
     }

     required init?(aDecoder: NSCoder) {
         super.init(aDecoder: aDecoder)
     }

     override func layoutSubviews() {
         super.layoutSubviews()
         setup()
     } 

     func setup() {
         self.clipsToBounds = true
         self.layer.cornerRadius = self.frame.size.width / 2.0
         self.layer.borderColor = borderColor
         self.layer.borderWidth = borderWidth
     }
}

答案 3 :(得分:0)

我有一个带有自定义按钮的repo

您可以使用它:https://github.com/titopalito/CustomUIButton

这不是我的,我是从教程中获得的;)

最诚挚的问候。