swift – 如何初始化UIButton子类?
我试图在Swift中向UIButton的子类添加double值
尝试了所有类型的inits并获取和设置选项,但我无法让它工作. 所以我从这开始 class CVSTButton : UIButton { var cvstPosition: Double required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") super.init(coder: aDecoder) } } 然后我试过: class CVSTButton : UIButton { var cvstPosition: Double { get { return self.cvstPosition } set { self.cvstPosition = newValue } } required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") super.init(coder: aDecoder) } } 我在这里没有弄错….请帮忙……
使用Swift 3,根据您的需要,您可以选择以下七个代码段中的一个来解决您的问题.
1.使用自定义初始化程序创建UIButton子类 此解决方案允许您使用适当的属性值创建UIButton子类的实例.使用此解决方案,您只能以编程方式创建UIButton子类的实例. import UIKit class CustomButton: UIButton { var myValue: Int required init(value: Int = 0) { // set myValue before super.init is called self.myValue = value super.init(frame: .zero) // set other operations after super.init,if required backgroundColor = .red } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } 用法: import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let button = CustomButton(value: 0) // let button = CustomButton() // also works button.setTitle("Hello",for: .normal) // auto layout button.translatesAutoresizingMaskIntoConstraints = false view.addSubview(button) button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true print(button.myValue) // prints 0 } } 2.使用便捷初始化程序创建UIButton子类 此解决方案允许您使用适当的属性值创建UIButton子类的实例.使用此解决方案,您只能以编程方式创建UIButton子类的实例. import UIKit class CustomButton: UIButton { var myValue: Int convenience init(squareOf value: Int) { self.init(value: value * value) } required init(value: Int = 0) { // set myValue before super.init is called self.myValue = value super.init(frame: .zero) // set other operations after super.init,if required backgroundColor = .red } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } 用法: import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let button = CustomButton(squareOf: 10) // let button = CustomButton(value: 100) // also works button.setTitle("Hello",for: .normal) // auto layout button.translatesAutoresizingMaskIntoConstraints = false view.addSubview(button) button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true print(button.myValue) // prints 100 } } 3.使用init(frame:CGRect)初始化程序创建UIButton子类 使用此解决方案,您只能以编程方式创建UIButton子类的实例. import UIKit class CustomButton: UIButton { var myValue: Int override init(frame: CGRect) { // set myValue before super.init is called self.myValue = 0 super.init(frame: frame) // set other operations after super.init,if required backgroundColor = .red } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } 用法: import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let button = CustomButton(frame: .zero) //let button = CustomButton() // also works button.setTitle("Hello",for: .normal) // auto layout button.translatesAutoresizingMaskIntoConstraints = false view.addSubview(button) button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true print(button.myValue) // prints 0 } } 4.使用init?(coder aDecoder:NSCoder)初始化程序创建UIButton子类 使用此解决方案,您可以从Storyboard创建UIButton子类的实例. import UIKit class CustomButton: UIButton { var myValue: Int required init?(coder aDecoder: NSCoder) { // set myValue before super.init is called self.myValue = 0 super.init(coder: aDecoder) // set other operations after super.init,if required backgroundColor = .red } } 用法: import UIKit class ViewController: UIViewController { @IBOutlet weak var button: CustomButton! override func viewDidLoad() { super.viewDidLoad() print(button.myValue) // prints 0 } } 5.使用init(frame:CGRect)和init?(编码器aDecoder:NSCoder)初始化器创建UIButton子类 使用此解决方案,您可以以编程方式或从Storyboard创建UIButton子类的实例. import UIKit class CustomButton: UIButton { var myValue: Int override init(frame: CGRect) { // set myValue before super.init is called self.myValue = 0 super.init(frame: frame) // set other operations after super.init,if required backgroundColor = .red } required init?(coder aDecoder: NSCoder) { // set myValue before super.init is called self.myValue = 0 super.init(coder: aDecoder) // set other operations after super.init if required backgroundColor = .red } } 6.使用属性的默认属性值创建UIButton子类 作为先前解决方案的替代方案,您可以在初始化程序之外为属性分配初始值. import UIKit class CustomButton: UIButton { var myValue: Int = 0 override init(frame: CGRect) { super.init(frame: frame) // set other operations after super.init,if required backgroundColor = .red } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) // set other operations after super.init if required backgroundColor = .red } } 7.使用具有可选类型的属性创建UIButton子类 如果在创建按钮时不希望/不能为属性设置默认值,则必须将属性类型设置为可选. import UIKit class CustomButton: UIButton { var myValue: Int? = nil override init(frame: CGRect) { super.init(frame: frame) // set other operations after super.init,if required backgroundColor = .red } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) // set other operations after super.init if required backgroundColor = .red } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |