webentwicklung-frage-antwort-db.com.de

Swift3: Schaltfläche mit Code hinzufügen

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?

9
pRivaT3 BuG

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 ????")
}
20

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")
}
13
axel

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.

2
pRivaT3 BuG