Übergeben von Argumenten an Selektor in Swift3

8

Ich füge programmatisch einen UITapGestureRecognizer zu einer meiner Ansichten hinzu:

%Vor%

Das erste Problem, auf das ich stieß, war "Argument von '#selector' bezieht sich nicht auf eine '@Objc' Methode, Eigenschaft oder Initialisierung.

Cool, also habe ich @objc zur HandleTap-Signatur hinzugefügt:

%Vor%

Jetzt bekomme ich den Fehler "Methode kann nicht mit @objc markiert werden, da der Typ des Parameters in Objective-C nicht dargestellt werden kann.

Es ist nur ein Bild der Karte eines Gebäudes, mit einigen Pin-Bildern, die die Position von interessanten Punkten anzeigen. Wenn der Benutzer einen dieser Pins antippt, würde ich gerne wissen, welchen Punkt von Interesse Sie angetippt haben, und ich habe ein Modellobjekt, das diese Punkte von Interesse beschreibt. Ich benutze dieses Modellobjekt, um dem Pin-Bild seine Koordinaten auf der Karte zu geben, also dachte ich, es wäre einfach für mich gewesen, das Objekt einfach an den Gesten-Handler zu senden.

    
mike 06.04.2017, 09:54
quelle

2 Antworten

21

Es sieht so aus, als ob Sie ein paar Dinge falsch verstehen.

Wenn Sie target/ action verwenden, wird die Signatur der Funktion angezeigt muss eine bestimmte Form haben ...

%Vor%

oder

%Vor%

wo ...

  

Der Parameter sender ist das Steuerobjekt, das die Aktionsnachricht sendet.

In Ihrem Fall ist der Absender die UITapGestureRecognizer

Außerdem sollte #selector() die func-Signatur enthalten und enthält keine übergebenen Parameter. Also für ...

%Vor%

Sie sollten ...

haben %Vor%

Vorausgesetzt, die Funktion und die Geste befinden sich in einem View-Controller, von dem modelObj eine Eigenschaft / ein Ivar ist, muss sie nicht mit dem Gestenerkenner übergeben werden. Sie können einfach in handleTap

    
Ashley Mills 06.04.2017, 10:30
quelle
0

Schritt 1: Erstellen Sie das benutzerdefinierte Objekt des Absenders.

Schritt 2: Fügen Sie Eigenschaften hinzu, die Sie ändern möchten, indem Sie ein benutzerdefiniertes Objekt des Absenders verwenden

Schritt 3: Geben Sie den Sender in Empfangsfunktion an ein benutzerdefiniertes Objekt um und greifen Sie auf diese Eigenschaften zu

Für zB: Klicken Sie auf die Schaltfläche, wenn Sie die Zeichenfolge oder ein benutzerdefiniertes Objekt dann senden möchten

Schritt 1: Erstellen

%Vor%

Schritt 2: Erstellen Sie IBOutlet dieser Schaltfläche mit einer benutzerdefinierten Klasse wie folgt

%Vor%

Schritt 3: Fügen Sie Eigenschaften hinzu, die Sie ändern möchten, indem Sie ein benutzerdefiniertes Objekt des Absenders verwenden

%Vor%

Schritt 4: Geben Sie den Sender in Empfangsfunktion an ein benutzerdefiniertes Objekt um und greifen Sie auf diese Eigenschaften zu

%Vor%

Schritt 5: Legen Sie die benutzerdefinierte Klasse auch im Storyboard fest

    
Ninad Kambli 03.04.2018 10:44
quelle

Tags und Links