it-swarm.com.de

Bei Swift 3 bleibt das programmgesteuerte Hinzufügen eines Ziels an der Taste hängen

Ich habe ein UIButton mit Swift 3 erstellt und möchte, dass eine Nachricht gedruckt wird, wenn sie gedrückt wird. 

Also habe ich so etwas gemacht: In loadView ()

button.addTarget(self, action: #selector(ViewController.pressButton(button:)), for: .touchUpInside)

Eine Methode: 

func pressButton(button: UIButton) {

    NSLog("pressed!")

}

Es passiert jedoch nichts, wenn ich auf die Schaltfläche klicke. 

15
user234159

Fügen Sie den Button-Code in Ihre viewDidLoad ein und es wird für Sie funktionieren:

override func viewDidLoad() {
    super.viewDidLoad()
    let button = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
    button.backgroundColor = UIColor.gray
    button.addTarget(self, action: #selector(pressButton(button:)), for: .touchUpInside)
    self.view.addSubview(button)
}

func pressButton(button: UIButton) {
    NSLog("pressed!")
}

Sie müssen nicht ViewController.pressButton zu selector hinzufügen, es genügt mit dem function name.

Swift 4.x Version:

let button = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
button.backgroundColor = .gray
button.tag = 0
button.addTarget(self, action: #selector(pressButton(_:)), for: .touchUpInside)
self.view.addSubview(button)

@objc func pressButton(_ button: UIButton) {
    print("Button with tag: \(button.tag) clicked!")
}
26
Rashwan L

versuchen Sie dies in Swift3!

button.addTarget(self, action: #selector(self.pressButton(button:)), for: .touchUpInside)

@objc func pressButton(button: UIButton) { NSLog("pressed!") }
6
Otis Lee

Verwenden Sie den folgenden Code.

button.addTarget(self, action: #selector(FirstViewController.cartButtonHandler), for: .touchUpInside)

Ihr Klassenname entspricht FirstViewController

Ihr Selektor entspricht der folgenden Funktion

func cartButtonHandler() {

}
5
arango_86

In Swift 3 verwenden Sie diese -

object?.addTarget(objectWhichHasMethod, action: #selector(classWhichHasMethod.yourMethod), for: someUIControlEvents)

Zum Beispiel (aus meinem Code) -

self.datePicker?.addTarget(self, action:#selector(InfoTableViewCell.datePickerValueChanged), for: .valueChanged)

Geben Sie einfach einen : hinter dem Methodennamen ein, wenn Sie den Sender als Parameter verwenden möchten.

3
Nikhil Manapure
 let cancelButton = UIButton.init(frame: CGRect(x: popUpView.frame.size.width/2, y: popUpView.frame.size.height-20, width: 30, height: 30))
        cancelButton.backgroundColor = UIColor.init(patternImage: UIImage(named: cancelImage)!)
        cancelButton.addTarget(self, action: #selector(CommentsViewController.canceled), for:.touchUpInside)
0
Divya Rayapati

Sie erwähnen, dass der Aufruf addTarget sich in loadView() befindet. Befindet sich das in Ihrer benutzerdefinierten Unteransicht oder im viewController? 

Von Ihrem Selektor aus wird auf eine Methode in Ihrer ViewController-Klasse abgezielt. Wenn jedoch die target für diese Aktion die Ansicht selbst ist, hat dies den Eindruck, dass die Aktion nicht durchläuft. 

Wenn Sie Ihre Schaltfläche in einem viewController deklarieren und in viewDidLoad dieses Ziel wie oben hinzufügen, sollte die Nachricht gedruckt werden, während Sie suchen. Ich glaube, Sie zielen mit Ihrer Aktion auf die falsche Klasse ab.

0
BHendricks
  1. Fügen Sie den Tastencode in der override func viewDidLoad()-Methode hinzu
  2. Stellen Sie sicher, dass Ihr Action-Handler mit @IBAction folgendermaßen gekennzeichnet ist:

    @IBAction-Funktion Drücken Sie die Taste (Taste: UIButton) { drucken ("gedrückt!") }

Dann wird es klappen!

0
SpkingR