Ich versuche das jetzt seit ein paar Tagen, und nachdem ich Tonnen von Nachrichten von Leuten gelesen habe, die das auch versuchen, kann ich immer noch nicht voll arbeiten UITextField
in einigen von mirUITableViewCells
, genau wie in diesem Beispiel:
Entweder funktioniert das Formular, aber der Text ist nicht sichtbar (obwohl ich seine Farbe auf Blau gesetzt habe). Die Tastatur wird auf dem Feld angezeigt, wenn ich darauf klicke, und ich konnte die Tastaturereignisse nicht korrekt implementieren. Ich habe es mit einer Reihe von Beispielen von Apple versucht (hauptsächlich UICatalog
, wo es ein ähnliches Steuerelement gibt), aber es funktioniert immer noch nicht richtig.
Kann mir jemand helfen (und all den Leuten, die versuchen, diese Kontrolle zu realisieren) und eine einfache Implementierung von a UITextField
in a posten UITableViewCell
, die gut funktioniert?
CGRectMake(A_MAGIC_NUMBER, ANOTHER_MAGIC_NUMBER, YET_ANOTHER_HARDCODED_MAGIC_NUMBER, OH_HERES_ANOTHER_MYSTERIOUS_HARDCODED_MAGIC_NUMBER)
? Woher kommen diese Zahlen?Antworten:
Probieren Sie es aus. Funktioniert wie ein Zauber für mich (auf iPhone-Geräten). Ich habe diesen Code einmal für einen Anmeldebildschirm verwendet. Ich habe die Tabellenansicht so konfiguriert, dass sie zwei Abschnitte enthält. Sie können natürlich die Abschnittsbedingungen loswerden.
Ergebnis sieht so aus:
quelle
[_field addTarget:self action:@selector(editingEnded:) forControlEvents:UIControlEventEditingDidEnd];
.[cell addSubview:playerTextField];
Sie diese Option, damit es mit iOS 5.0+ funktioniert.Hier ist eine Lösung, die unter iOS6 / 7/8/9 gut aussieht .
Update 10.06.2016: Dies funktioniert immer noch mit iOS 9.3.3
Vielen Dank für Ihre Unterstützung. Dies ist jetzt auf CocoaPods / Carthage / SPM unter https://github.com/fulldecent/FDTextFieldTableViewCell möglich
Grundsätzlich nehmen wir das Lager
UITableViewCellStyleValue1
und heften ein,UITextField
wo das seindetailTextLabel
soll. Dies gibt uns eine automatische Platzierung für alle Szenarien: iOS6 / 7/8/9, iPhone / iPad, Bild / Kein Bild, Zubehör / Kein Zubehör, Hochformat / Querformat, 1x / 2x / 3x.Hinweis: Hierbei wird ein Storyboard mit einer Typzelle mit dem
UITableViewCellStyleValue1
Namen "Wort" verwendet.quelle
UITableViewCellStyleRightDetail
meinst duUITableViewCellStyleValue1
?So habe ich das erreicht:
TextFormCell.h
TextFormCell.m
Es mag ein bisschen ausführlich erscheinen, aber es funktioniert!
Vergessen Sie nicht, den Delegierten einzustellen!
quelle
Probier diese. Es kann auch gescrollt werden, und Sie können die Zellen wiederverwenden, ohne zuvor hinzugefügte Unteransichten entfernen zu müssen.
quelle
Das sollte nicht schwierig sein. Fügen Sie beim Erstellen einer Zelle für Ihre Tabelle der Inhaltsansicht der Zelle ein UITextField-Objekt hinzu
Legen Sie den Delegaten des UITextField als self fest (dh Ihren Viewcontroller). Geben Sie dem Textfeld ein Tag, damit Sie identifizieren können, welches Textfeld in Ihren Delegatenmethoden bearbeitet wurde. Die Tastatur sollte sich öffnen, wenn der Benutzer auf das Textfeld tippt. Ich habe es so zum Laufen gebracht. Ich hoffe es hilft.
quelle
CGRectZero
vorab als Rahmen einrichten, stellen Sie sicher, dass Sie den Rahmen Ihres Textfelds einrichten, bevor Sie ihn der Ansichtshierarchie hinzufügen. Das Abrufen derframe
Eigenschaft der Inhaltsansicht der Zelle ist für eine solche Aufgabe besonders hilfreich.Einzelheiten
Vollständiger Beispielcode
Ergebnis
quelle
Ich hatte dies vermieden, indem ich eine Methode aufgerufen hatte, die
[cell.contentView bringSubviewToFront:textField]
jedes Mal ausgeführt werden sollte, wenn meine Zellen auftauchten, aber dann entdeckte ich diese relativ einfache Technik:Scheint nicht das gleiche Problem mit Hintergrundüberschreitung zu haben, und es richtet sich (etwas) von selbst aus. Außerdem wird das textLabel automatisch abgeschnitten, um ein Überlaufen (oder darunter) zu vermeiden, was praktisch ist.
quelle
Ich bin auf das gleiche Problem gestoßen. Es scheint, dass das Festlegen der
cell.textlabel.text
Eigenschaft das UILabel an die Vorderseite der Inhaltsansicht der Zelle bringt. Fügen Sie die Textansicht nach dem Einstellen hinzutextLabel.text
oder rufen Sie (falls dies nicht möglich ist) Folgendes auf :quelle
Ich hatte wirklich Probleme mit dieser Aufgabe auf dem iPad, da Textfelder in UITableView unsichtbar angezeigt wurden und die gesamte Zeile blau wird, wenn sie scharfgestellt wird.
Was am Ende für mich funktioniert hat, war die Technik, die unter "Die Technik für statische Zeileninhalte" im Programmierhandbuch für Tabellenansichten von Apple beschrieben wurde . Ich habe sowohl die Beschriftung als auch das Textfeld in eine UITableViewCell in der NIB für die Ansicht eingefügt und diese Zelle über einen Ausgang herausgezogen
cellForRowAtIndexPath:
. Der resultierende Code ist viel übersichtlicher als UICatalog.quelle
Hier ist, wie es gemacht wird. Ich glaube, der richtige Weg. Es funktioniert auf Ipad und Iphone, als ich es getestet habe. Wir müssen unsere eigenen customCells erstellen, indem wir eine uitableviewcell klassifizieren:
Starten Sie in interfaceBuilder ... erstellen Sie einen neuen UIViewcontroller, nennen Sie ihn customCell (melden Sie sich freiwillig für eine xib an, während Sie dort sind). Stellen Sie sicher, dass customCell eine Unterklasse von uitableviewcell ist
Löschen Sie jetzt alle Ansichten und erstellen Sie eine Ansicht, um die Größe einer einzelnen Zelle zu erhalten. Machen Sie diese Ansicht Unterklasse benutzerdefinierte Zelle. Erstellen Sie nun zwei weitere Ansichten (duplizieren Sie die erste).
Gehen Sie zu Ihrem Verbindungsinspektor und suchen Sie 2 IBOutlets, mit denen Sie jetzt eine Verbindung zu diesen Ansichten herstellen können.
-backgroundView -SelectedBackground
Verbinden Sie diese mit den letzten beiden Ansichten, die Sie gerade dupliziert haben, und sorgen Sie sich nicht um sie. Fügen Sie in der allerersten Ansicht, die customCell erweitert, Ihr Label und Ihr uitextfield ein. bin in customCell.h eingestiegen und verbinde dein Label und dein Textfeld. Stellen Sie die Höhe dieser Ansicht auf 75 (Höhe jeder Zelle) ein.
Stellen Sie in Ihrer customCell.m-Datei sicher, dass der Konstruktor ungefähr so aussieht:
Erstellen Sie nun einen UITableViewcontroller und verwenden Sie in dieser Methode die customCell-Klasse wie folgt:
}}
quelle
Hier ist eine Drop-In-Unterklasse, für
UITableViewCell
die das detailTextLabel durch ein bearbeitbares ersetzt wirdUITextField
(oder im Falle vonUITableViewCellStyleDefault
das textLabel ersetzt ). Dies hat den Vorteil, dass Sie alle bekannten UITableViewCellStyles, Zubehöransichten usw. wiederverwenden können. Jetzt können die Details bearbeitet werden!Einfach zu verwenden - erstellen Sie einfach Ihre Zelle wie zuvor, verwenden Sie jetzt cell.textField anstelle von cell.detailTextLabel (oder cell.textLabel im Fall von
UITableViewCellStyleDefault
). z.BInspiriert von und verbessert von FDs Antwort
quelle
Für Next / Return-Ereignisse auf mehreren UITextfields in UITableViewCell in dieser Methode hatte ich UITextField im Storyboard übernommen.
Um den Text aus dem Textfeld zu holen,
quelle