我在下面有這個自定義按鈕類:
import UIKit
class CustomButton: UIButton {
init(title: String) {
super.init(frame: .zero)
let height: CGFloat = 38
setTitleColor(UIColor.white, for: .normal)
setTitle(title, for: .normal)
setDimensions(height: height, width: 120)
layer.cornerRadius = height/7
backgroundColor = .red
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
這是我的控制器中使用此類創建按鈕的代碼:
private let loginButton: UIButton = {
let button = CustomButton(title: "Login")
button.isEnabled = false
button.addTarget(self, action: #selector(handleLogin), for: .touchUpInside)
return button
}()
我不能給它分配一個 buttonType 因為 buttonType 是一個只能獲取的屬性。通常我只是通過說 let button = UIButton(type: .system) 來分配 buttonType 但在上面,我通過使其成為 CustomButton 類的按鈕來創建按鈕。如何為此自定義按鈕類設定按鈕型別?謝謝。
uj5u.com熱心網友回復:
由于按鈕型別是一個只能獲取的屬性,設定它的唯一方法是呼叫init(type:)初始化程式。要呼叫它,您可以執行以下操作:
class CustomButton: UIButton {
convenience init(title: String, type: UIButton.ButtonType = .system) {
self.init(type: type)
let height: CGFloat = 38
setTitleColor(UIColor.white, for: .normal)
setTitle(title, for: .normal)
setDimensions(height: height, width: 120)
layer.cornerRadius = height/7
backgroundColor = .red
self.buttonType
}
...
}
請注意,這init(type:)是一個便利初始化器,因此它必須從便利初始化器委托。這意味著您無法初始化 中的任何存盤屬性init(title:type:),但無論如何您似乎都沒有。存盤的屬性只能在其屬性初始化器inline中初始化。具有可自定義存盤屬性的按鈕是否仍然可以稱為“系統”型別按鈕也是有爭議的。
另一件需要注意的事情是,由于該類只有一個便利初始化器,它從其超類繼承了所有初始化器,因此為什么它是self.init(type: type)而不是super.init(type: type),以及為什么不需要宣告所需的初始化器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/452644.html
