webentwicklung-frage-antwort-db.com.de

Xcode8 kann nicht mehrere/einzelne Uibuttons mit einem @IBAction in der Swift-Datei verbinden

Ich benutze Xcode 8 Beta. Ich kann nicht mehrere UIButtons aus dem Storyboard ziehen, um eine Verbindung zu einer einzelnen @IBAction in Swift-Datei herzustellen. Fehler? Danke für Ihre Hilfe.

14
Anthony D.

Mit dieser Problemumgehung können Sie eine vorhandene Aktion hinzufügen und mehrere Schaltflächen zu einer Aktion verbinden.

Ich denke, es gibt einen Fehler in Xcode8. Sie können einer einzelnen Aktion/Funktion mehrere/einzelne Schaltflächen hinzufügen, indem Sie sender in _ sender ändern.

zB: - Normale Taste

   @IBAction func huu(sender: UIButton) {

   }

Sie können dieser Aktion nicht mehrere Schaltflächen oder eine einzelne Schaltfläche hinzufügen, die Sie einfach so ändern müssen. Anschließend können Sie mehrere Schaltflächen hinzufügen, indem Sie vom Storyboard aus ziehen und eine Verbindung herstellen.

 @IBAction func huu(_ sender: UIButton) {

 }

Nach dem Anschließen von IBOutlets zeigt Xcode eine Warnung wie folgt an:

 enter image description here

Um diese Warnung zu entfernen, löschen Sie einfach das Zeichen _ aus der Aktion/Funktion. Stellen Sie sicher, dass Sie _ löschen, nachdem Sie Ihre IBOutlets verbunden haben

Hoffe das wird dir helfen! :)

18

Wenn Sie den Absender in AnyObject anstatt in Any oder UIButton ändern, können Sie mehrere Schaltflächen mit derselben Aktion verbinden.

13
Sean

Wenn Sie eine Tastenaktion verbinden, sieht die Methode standardmäßig folgendermaßen aus:

@IBAction func s(_ sender: Any) {
    }

Ändern Sie einfach Any zu UIButton und Sie können weitere Tastenaktionen mit dieser bestimmten Methode verbinden.

Nach dem Ändern sollte es also so aussehen:

@IBAction func s(_ sender: UIButton) {
    }

Hoffe, das wird das Problem lösen. :)

10
kunjus

Wenn Sie "Any" in "UIButton" ändern, funktioniert dies.

4
assangar

Die unten stehende IBAction funktioniert nur für eine Schaltfläche.

@IBAction func singleButton(sender: Any) {
   // Write your logic
}

Die unten stehende IBAction funktioniert mit mehreren Schaltflächen.

@IBAction func multipleButton(sender: UIButton) {
   // To find a particular button from an array of buttons
   if sender.tag == 1{
     // Write your logic
   }else if sender.tag == 2{
    // Write your logic
   }

}
1
suneel gunupudi

Wenn ich richtig liege, müssen Sie UIGestureRecognizer verwenden, um mehrere Dinge an eine Aktion anzuhängen.

Sie können jeder Schaltfläche eine UIGestureRecognizer zuweisen und dann eine davon wie gewohnt mit einer Schaltfläche (Strg-Ziehen) einrichten, bevor Sie von den anderen Gestenerkennungsfunktionen mit Strg-Ziehen auf die erste von Ihnen ausgeführte Aktion klicken.

1
Caleb Kleveter

Ich denke, es ist ein anderes Problem: Wenn Sie versuchen, eine IBAction zum ersten Mal zu erstellen, funktioniert es einwandfrei. Wenn Sie sich jedoch aus irgendeinem Grund entschließen, die IBAction erneut zu verbinden (dieselbe Aktion mit einem anderen Objekt oder die Funktion umzubenennen), schlägt dies fehl.

Tatsächlich erstellen Sie eine IBAction mit dem Namen doSomething, die eine Funktion func doSomething(sender: UIButton) erstellt. Bei XCode 8 (oder Swift 2.3/3.0) wird diese Methode jedoch als func doSomethingWithSender(sender: UIButton) interpretiert.

Ich denke, es ist ein Fehler, Apple hat sich ein bisschen zu sehr mit der Sache "Objc-Methoden umbenennen" beschäftigt.

0
Frédéric Adda

Ich habe den Absender von Any auf UIButton geändert

Control ziehen Sie die Schaltfläche auf den Namen der Funktion.

0
Anil Singh

Ich habe es viele Male versucht, schließlich habe ich das Ergebnis wie folgt erhalten:

Normale UIAction

@IBAction func selectBtn(_ sender: Any) {

   }

versuchen Sie für mehrere Schaltflächen mit derselben UIAction-Methode Folgendes:

@IBAction func selectBtn(_ sender: UIButton) {

   }

Das hat bei mir funktioniert. Ich habe den Rückgabetyp von "Beliebig" in "UIButton" geändert

0
suneel gunupudi

In der Vollversion von Swift 3 wird dies funktionieren.

Ändern Sie einfach Any in UIButton und Sie können weitere Tastenaktionen mit dieser bestimmten Methode verbinden.

Nach dem Ändern sollte es also so aussehen:

@IBAction func s (_ sender: UIButton) {} Damit wird das Problem sicher gelöst. :)

0
Mayur Bansal