Wie behandelt man Berührungsereignisse in UILabel als Unteransicht von UITableViewCell?

8

Meine App hat eine benutzerdefinierte UITableView . In der cellForRowAtIndexPath -Delegate-Methode von UIViewController instanziiere ich benutzerdefinierte UITableViewCell -Objekte, die mehrere benutzerdefinierte UILabels (eigentlich eine Unterklasse von OHAttributedLabel ) als Teilansichten der Inhaltsansicht enthalten.

Ich habe versucht, userInteractionEnabled = YES auf dem Etikett zu setzen, dann Touch-Ereignisse im View-Controller hinzuzufügen, aber das funktioniert nicht.

Ideen?

Danke

    
Bama91 14.08.2011, 20:09
quelle

6 Antworten

12
%Vor%

Oder

%Vor%     
Praveen-K 14.08.2011, 20:32
quelle
1

Ein UILabel ist kein UIControl, sodass Sie keine Ereignisse auf UIControlEventTouchUpInside oder ähnlichem erhalten. Warum nicht einen Knopf benutzen? Sie können es genau wie ein Etikett aussehen lassen.

Unabhängig davon müssen Sie wahrscheinlich addTarget: action: forControlEvents: und tag auf dem UIButton in Ihrer cellForRowAtIndexPath: -Methode setzen. In dieser Methode erkennen Sie, welcher Knopf der Zelle angezapft wurde, indem Sie den Tag-Wert untersuchen.

Wenn Sie UILabel verwenden müssen, müssen Sie eine Unterklasse erstellen und die touchesBegan / touchesEnded-Methoden (von UIResponder geerbt) abfangen, um UIControlEventTouchUpInside selbst zu erkennen.

    
Adam Eberbach 14.08.2011 20:32
quelle
1

Problem in OHAttributedLabel. Dieses Label behandelt auch das Tippen auf Links. Also für Griff tippen Sie auf einen beliebigen Punkt des Labels (nicht nur Link) müssen Sie

%Vor%

Wo self.textLabel ist Ihr OHAttributedLabel. Und vergiss nicht userInteractionEnabled.

    
surfrider 15.03.2013 07:18
quelle
0

Ich weiß nicht, ob es das gleiche Problem ist, aber ... Ich habe ein Etikett hinzugefügt und konnte es nicht erkennen, dass es eine Berührung war. Ich erkannte schließlich, dass es daran lag, dass ich es als Unteransicht hinzufügte, aber seinen Rahmen war außerhalb des Rahmens seiner Eltern, daher brach die Touch-Hierarchie.

    
dawid 24.11.2012 09:01
quelle
0

Ich hatte gerade das Problem mit statischen Tabellenzellen für eine Einstellungstabelle, wo ich wollte, dass die ganze Zelle den ersten Responder für das Textfeld der Zelle auslöst.

Ich habe am Ende eine transparente (benutzerdefinierter, leerer Titel) Schaltfläche hinter dem Label (Touch deaktiviert) und dem Textfeld hinzugefügt, nachdem ich keine Berührungen mit Gestenerkennern erhalten habe. Ich denke, es sollte auf eine elegantere Weise funktionieren, aber es hat die Aufgabe für jetzt und diesen begrenzten Zweck gelöst. (und Sie können nur connect von der Standardaktion der Schaltfläche ziehen)

Etwas hässlich. Dann beschreibt es nur den Bereich hinter dem Textfeld, der auf Berührung reagiert. Was war die Absicht? Vielleicht ist es einfach nicht so ausgefallen.

Wird es behalten, bis ich den Grund dafür finde, dass die Erkenner nicht feuern.

    
user2400553 20.05.2013 05:30
quelle
0

Sie können stattdessen TTTAttributedLabel verwenden. es ist sehr leicht. Wenn Sie das UITableViewCell initialisieren, können Sie delegieren: TTTAttributedLabelDelegate wie:

%Vor%

Wenn Sie initialisieren, können Sie einen Link zu label hinzufügen:

%Vor%

Sie können also alles tun, was Sie wollen:

%Vor%     
kingboylee0595 10.12.2013 05:24
quelle