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
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.
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.
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.
Sie können stattdessen TTTAttributedLabel
verwenden. es ist sehr leicht.
Wenn Sie das UITableViewCell initialisieren, können Sie delegieren: TTTAttributedLabelDelegate
wie:
Wenn Sie initialisieren, können Sie einen Link zu label hinzufügen:
%Vor%Sie können also alles tun, was Sie wollen:
%Vor%Tags und Links objective-c iphone uitableview ios cocoa-touch