Mit Swift 3 können Sie je nach Bedarf eines der sieben folgenden Codefragmente auswählen , um Ihr Problem zu lösen.
1. Erstellen Sie Ihre UIButton
Unterklasse mit einem benutzerdefinierten Initialisierer
Mit dieser Lösung können Sie Instanzen Ihrer UIButton
Unterklasse mit dem entsprechenden Wert für Ihre Eigenschaft erstellen . Mit dieser Lösung können Sie Instanzen Ihrer UIButton-Unterklasse nur programmgesteuert erstellen.
import UIKit
class CustomButton: UIButton {
var myValue: Int
required init(value: Int = 0) {
self.myValue = value
super.init(frame: .zero)
backgroundColor = .red
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Verwendung:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button = CustomButton(value: 0)
button.setTitle("Hello", for: .normal)
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)
}
}
2. Erstellen Sie Ihre UIButton
Unterklasse mit einem praktischen Initialisierer
Mit dieser Lösung können Sie Instanzen Ihrer UIButton
Unterklasse mit dem entsprechenden Wert für Ihre Eigenschaft erstellen . Mit dieser Lösung können Sie Instanzen Ihrer UIButton
Unterklasse nur programmgesteuert erstellen .
import UIKit
class CustomButton: UIButton {
var myValue: Int
convenience init(squareOf value: Int) {
self.init(value: value * value)
}
required init(value: Int = 0) {
self.myValue = value
super.init(frame: .zero)
backgroundColor = .red
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Verwendung:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button = CustomButton(squareOf: 10)
button.setTitle("Hello", for: .normal)
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)
}
}
3. Erstellen Sie Ihre UIButton
Unterklasse mit dem init(frame: CGRect)
Initialisierer
Mit dieser Lösung können Sie Instanzen Ihrer UIButton
Unterklasse nur programmgesteuert erstellen .
import UIKit
class CustomButton: UIButton {
var myValue: Int
override init(frame: CGRect) {
self.myValue = 0
super.init(frame: frame)
backgroundColor = .red
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Verwendung:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button = CustomButton(frame: .zero)
button.setTitle("Hello", for: .normal)
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)
}
}
4. Erstellen Sie Ihre UIButton
Unterklasse mit dem init?(coder aDecoder: NSCoder)
Initialisierer
Mit dieser Lösung können Sie Instanzen Ihrer UIButton
Unterklasse aus Storyboard erstellen .
import UIKit
class CustomButton: UIButton {
var myValue: Int
required init?(coder aDecoder: NSCoder) {
self.myValue = 0
super.init(coder: aDecoder)
backgroundColor = .red
}
}
Verwendung:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var button: CustomButton!
override func viewDidLoad() {
super.viewDidLoad()
print(button.myValue)
}
}
5. Erstellen Sie Ihre UIButton
Unterklasse mit init(frame: CGRect)
und init?(coder aDecoder: NSCoder)
Initialisierer
Mit dieser Lösung können Sie Instanzen Ihrer UIButton
Unterklasse programmgesteuert oder über Storyboard erstellen .
import UIKit
class CustomButton: UIButton {
var myValue: Int
override init(frame: CGRect) {
self.myValue = 0
super.init(frame: frame)
backgroundColor = .red
}
required init?(coder aDecoder: NSCoder) {
self.myValue = 0
super.init(coder: aDecoder)
backgroundColor = .red
}
}
6. Erstellen Sie Ihre UIButton
Unterklasse mit einem Standardeigenschaftswert für Ihre Eigenschaft
Alternativ zu den vorherigen Lösungen können Sie Ihrer Eigenschaft außerhalb der Initialisierer einen Anfangswert zuweisen.
import UIKit
class CustomButton: UIButton {
var myValue: Int = 0
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .red
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
backgroundColor = .red
}
}
7. Erstellen Sie Ihre UIButton
Unterklasse mit Ihrer Eigenschaft mit einem optionalen Typ
Wenn Sie beim Erstellen Ihrer Schaltfläche keinen Standardwert für Ihre Eigenschaft festlegen möchten / können, müssen Sie Ihren Eigenschaftstyp optional festlegen.
import UIKit
class CustomButton: UIButton {
var myValue: Int? = nil
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .red
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
backgroundColor = .red
}
}
CustomButton(frame: CGRect(x: 100, y: 300, width: 200, height: 50))
eher als einCustomButton(frame: .zero)
Auto LayoutZwei Dinge, die Sie dort benötigen - (1)
cvstPosition
benötigen einen Anfangswert, entweder in der Deklaration oder in derinit
vor dem Aufrufsuper.init()
. (2) Dieser Aufruf vonfatalError
wird eingegeben, damit Sie nicht vergessen, den Initialisierer zu implementieren - es handelt sich im Grunde genommen um einen absichtlichen Absturz. Löschen!Wenn Sie den Anfangswert in der Deklaration festlegen, ist Folgendes nicht erforderlich
init
:class CVSTButton : UIButton { var cvstPosition: Double = 0 }
Oder setzen Sie den Anfangswert im Initialisierer:
class CVSTButton : UIButton { var cvstPosition: Double required init(coder aDecoder: NSCoder) { cvstPosition = 0 super.init(coder: aDecoder) } }
quelle
init
in Swift 2.2, alsorequired init?(coder aDecoder: NSCoder) {
Swift> = 2.2:
Erben Sie einfach von UIButton, und Ihre Unterklasse wird zum
.Custom
Standardtyp.Swift 2:
convenience init(type buttonType: UIButtonType) { super.init(frame: CGRectZero) // this button be automatically .Custom }
Schnell:
override class func buttonWithType(buttonType: UIButtonType) -> AnyObject { let button = super.buttonWithType(buttonType) as! UIButton // your default code return button }
quelle
HINWEIS: Ich verwende Swift 3 in XCode 8.3.3
Dies ist eine einfache und einfache Problemumgehung, die ich verwendet habe, wenn ich benutzerdefinierte Eigenschaften und Methoden zu a hinzufügen musste
UIButton
:class CVSTButton: UIButton { var cvstPosition: Double static func button(withCVSTPosition cvstPosition: Double) -> CVSTButton { let button = CVSTButton(type: .detailDisclosure) // You may adjust the initializer used to suit your needs. button.cvstPosition = cvstPosition // Then you can simply set the the properties (which are passed as arguments to the factor/class method) return button } }
Um es zu benutzen:
let cvstButton = CVSTButton.button(withCVSTPosition: 2.0)
quelle