web-dev-qa-db-de.com

Behandeln Sie Touch Event in UILabel und binden Sie es an eine IBAction an

Ok, also habe ich ein UILabel im Interface Builder erstellt, das einige Standardtexte von "tap to begin" anzeigt.

Wenn der Benutzer auf UILabel tippt, soll eine IBAction-Methode ausgelöst werden: -(IBAction)next;, die den Text auf dem Etikett aktualisiert, um etwas Neues zu sagen.
Es wäre sehr praktisch, wenn ich auf diese Weise einfach eine Verbindung von meiner Methode zu meinem Etikett ziehen und dann wie mit einer Schaltfläche die Option zum Ausbessern auswählen könnte. aber leider keine Zigarre.

wie auch immer, ich denke meine Frage ist, muss ich UILabel unterordnen, damit dies funktioniert? Oder gibt es eine Möglichkeit, eine Schaltfläche über das Etikett zu ziehen, aber 0% undurchsichtig zu machen. Oder gibt es eine einfachere Lösung, die ich vermisse?

100
wfbarksdale

Hör zu:

UILabel *label = ...
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
      [[UITapGestureRecognizer alloc] initWithTarget:self 
                                              action:@selector(labelTap)];
[label addGestureRecognizer:tapGesture];

Der Trick besteht darin, die Benutzerinteraktion zu aktivieren.

253
Scott Persinger

UILabel erbt von UIView, das von UIResponder erbt. Alle UIresponder-Objekte können Berührungsereignisse verarbeiten. Also in deiner Klassendatei, die über deine Ansicht Bescheid weiß (die das UIlabel enthält) implementiere:

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;

Stellen Sie im Interface Builder den Tag-Wert des UILabel ein. Wenn in Ihrer touchesBegan-Methode Berührungen auftreten, überprüfen Sie den Tag-Wert der Ansicht, zu der das Tag gehört:

UITouch *touch = [touches anyObject];

if(touch.view.tag == MY_TAG_VAL)
label.text = @"new text";

Sie verbinden Ihren Code in Ihrer Klassendatei mit dem UILabel-Objekt im Interface Builder, indem Sie Ihre UILabel-Instanzvariable mit dem Präfix IBOutlet deklarieren:

IBOutlet UILabel *label;

Dann können Sie sie im Interface Builder verbinden.

70
Remover

Swift

Sie haben ein IBOutlet

@IBOutlet var label: UILabel!

In dem Sie die Benutzerinteraktion aktivieren und einen Gestenerkenner hinzufügen

label.isUserInteractionEnabled = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(userDidTapLabel(tapGestureRecognizer:)))
label.addGestureRecognizer(tapGesture)

Und zum Schluss den Wasserhahn bedienen

func userDidTapLabel(tapGestureRecognizer: UITapGestureRecognizer) {
  // Your code goes here
}
16
César Cruz