2016-07-16 13 views
8

Ich lese Apple Swift (iOS) Dokumentation, aber es ist für Swift 2 geschrieben und ich Swift 3 verwenden. Ich möchte einen programmgesteuerten Button hinzufügen, aber es scheint, dass es eine Änderung gibt und ich nicht finden kann etwas reparieren. HierSwift3: Hinzufügen Schaltfläche mit Code

ist der Code für den 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 nach machte die 'Fix-it' zeigte der Fehler dies im Selektor ist:

button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(button:)), for: .touchDown) 

Diese hätte "Button gedrückt" drucken sollen, tut es aber nicht. Irgendeine Hilfe?

+0

Was ist mit Ihrer RatingControl.ratingButtonTapped (Button :) Methode? Es hängt von der Implementierung ab. –

+0

Ich weiß nicht, ob das ein Problem ist, da alles, was ich geschrieben habe, von Apples Beispiel ist ... hier ist der Link: tinyurl.com/q5oouqz –

+0

@OnurTuna der Selektor verweist nur darauf, es sollte nicht von der Implementierung – Gerald

Antwort

12

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") 
} 
+0

Danke das hat mir sehr geholfen. –

2

Die Lösung gefunden. Aus irgendeinem Grund:

func ratingButtonTapped(button: UIButton) 

benötigt eine Schaltfläche "_" vor. So soll 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 die Hilfe :) Ihre Methode auch richtig sein, aber das ist das ein Apple es will.

+1

In swift 3 werden alle Parameter benannt, sogar der erste Parameter, anders als in swift 2. Eine bessere Lösung ist '#selector (RatingControl.ratingButtonTapped (button :))'. Auf diese Weise müssen Sie Ihre Funktion nicht ändern, nur um sie im Selektor zu verwenden. – Gerald

17

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 ") 
} 
+0

Danke, dies ist die richtige Antwort in Bezug auf das Problem in der Dokumentation, wenn Sie Swift 3 anstelle von 2 verwenden. – meburbo

Verwandte Themen