Ich lese die Apples Swift (iOS) -Dokumentation, aber sie wurde für Swift 2 geschrieben, und ich verwende Swift 3. Ich möchte eine Schaltfläche programmgesteuert hinzufügen, aber es scheint, dass es eine Änderung gibt und ich nicht finden kann, wie sie behoben werden kann.
Hier ist der Code für das Swift 2-Beispiel:
import UIKit
class RatingControl: UIView {
// MARK: Initialization
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// Buttons
let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
button.backgroundColor = UIColor.red()
button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), forControlEvents: .TouchDown)
addSubview(button)
}
override func intrinsicContentSize() -> CGSize {
return CGSize(width: 240, height: 44)
}
// MARK: Button Action
func ratingButtonTapped(button: UIButton){
print("Button pressed")
}
}
Die einzige Änderung, die ich gemacht habe, nachdem der Fehler behoben wurde, ist Folgendes im Selektor:
button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(button:)), for: .touchDown)
Dies sollte "Button gedrückt" gedruckt haben, aber nicht. Irgendeine Hilfe?
Mein Code:
button.backgroundColor = UIColor.red
button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), for: .touchDown)
override var intrinsicContentSize : CGSize {
//override func intrinsicContentSize() -> CGSize {
//...
return CGSize(width: 240, height: 44)
}
// MARK: Button Action
func ratingButtonTapped(_ button: UIButton) {
print("Button pressed ????")
}
Versuchen Sie so etwas. Ich habe nicht getestet, aber es sollte funktionieren:
let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
button.backgroundColor = UIColor.red
button.addTarget(self, action: #selector(ratingButtonTapped), for: .touchUpInside)
addSubview(button)
func ratingButtonTapped() {
print("Button pressed")
}
Die Lösung gefunden Aus irgendeinem Grund die:
func ratingButtonTapped(button: UIButton)
braucht ein "_" vor dem Button. So sollte es sein :
func ratingButtonTapped(_ button: UIButton)
Und der andere Teil des Codes muss sein:
button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), for: .touchDown)
Danke für das Helfen :) Deine Methode ist vielleicht auch richtig, aber das ist die, die Apple will.