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.
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 ...
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
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