web-dev-qa-db-de.com

Die Schaltflächenaktion kann nicht in Xcode 8 zu einer vorhandenen Funktion gezogen werden

Ich habe ein seltsames Problem mit Xcode 8. Wenn ich versuche, die Strg-Taste + die vorhandene Funktion zu ziehen, kann ich nicht nur einen neuen Ausgang oder eine neue Aktion erstellen. Seltsamer ist, dass selbst wenn ich Aktionen mit Strg + Ziehen erstellt habe, ich mich nicht mit derselben Schaltfläche verbinden kann, mit der ich die Aktion erstellt habe. Das IB-Symbol ist auch leer, da es keine Verbindung zwischen Aktion und Schaltfläche gibt, aber beim Klicken in Echtzeit wird die Aktion ausgeführt. Wenn ich jedoch versuche, die Aktion mit der Schaltfläche von Swift zum Storyboard zu verbinden, kann ich (das @IB-Symbol wird "voll" "), aber dann bekomme ich eine Ausnahme in Echtzeit, wenn Sie auf den nicht erkannten Selector myActionWithSender  enter image description here  enter image description here

19

In meiner Xcode-Version wird IBAction automatisch mit dem Parameter "Any" anstelle von "AnyObject" erstellt. Das Erstellen von IBAction explizit mit UIButton hat für mich funktioniert.

22
Umut Uygar

In meinem Fall müssen Sie Any in UIButton ändern. Es muss spezifisch sein, dass die Aktion von UIButton kommt.

@IBAction func buttonClicked(_ sender: UIButton) {

}
11
Didats Triadi

Klicken Sie auf den UIB-Button und gehen Sie im Bereich "Dienstprogramme" zu "Connections Inspector".

Klicken Sie auf den leeren Kreis neben dem Ereignis und ziehen Sie die Linie in den Funktionskörper.

2
Alaa Qaddoumi

klicken Sie mit der rechten Maustaste mit der Funktion "Öffnen" in das Touchup-Menü, um es zu ziehen.

1
ronak patel

In Ihrer .Swift-Datei ändern:

@IBAction func buttonClicked(sender: UIButton) { // Do something }

zu

@IBAction func buttonClicked(z sender: UIButton) { // Do something }

Fügen Sie einfach dieses kleine "z" hinzu (oder was auch immer Sie möchten). Ich habe einen Unterstrich '_' ausprobiert, und das funktioniert auch, aber es gibt eine Warnung, daher habe ich nur ein 'z' verwendet, um die Warnung zu umgehen.

Ich glaube, es ist ein Fehler in Xcode 8. Irgendwo (wahrscheinlich IB) erwartet es Swift 3-kompatiblen Code, bei dem der erste Parameter ein Label MUSS. Wenn es also das Wort "Absender" sieht, nimmt es (falsch) an, dass dies das Etikett ist. Das Hinzufügen eines Labels (in meinem Fall 'z') macht jeden glücklich.

Swift 2.3 erfordert kein Etikett. Swift 3 macht. Jaroslaw weist darauf hin, dass ein Upgrade von 2.3 auf 3.0 dieses Problem ebenfalls umgeht. Wenn Ihr Projekt jedoch bei 2.3 hängen bleibt, scheint das Hinzufügen eines Labels den Trick zu erfüllen.

0
briggsm

Auch in Swift 3 möchten Sie das Argument von @IBAction von (_ sender: Any) in (_ sender: UIButton) oder (_ sender: AnyObject)) ändern, jedoch manuell.

Es könnte funktionieren.

0
Lin

Sender von Any in AnyObject ändern funktioniert für mich

0
Thanh Luu

In meinem Fall hatte ich ein ähnliches Storyboard geöffnet. Einmal habe ich es geschlossen und dann - einmal auf die Schaltfläche geklickt, um die Blöcke für die Ausrichtung zu sehen .- Dann wurde mit der rechten Maustaste geklickt und auf den ViewController gezogen Platzieren Sie den Codeblock des Ereignisses im ViewController.

0
Hem