In WWDC 2013-Video schlägt Apple vor, die Auswahl in einer Tabellenansicht in iOS 7 anzuzeigen. Wie wird eine Ansicht zwischen Zellen der Tabellenansicht eingefügt und animiert?
So aus der Apple Kalender-App:
In WWDC 2013-Video schlägt Apple vor, die Auswahl in einer Tabellenansicht in iOS 7 anzuzeigen. Wie wird eine Ansicht zwischen Zellen der Tabellenansicht eingefügt und animiert?
So aus der Apple Kalender-App:
Antworten:
Mit iOS7 hat Apple den Beispielcode veröffentlicht
DateCell
.Sie können den Beispielcode hier herunterladen: DateCell .
quelle
Sie können die Antwort verwenden, die ich zuvor unten gegeben habe, oder diese neue Klasse in Swift verwenden, die ich erstellt habe, um diese Aufgabe viel einfacher und sauberer zu gestalten: https://github.com/AaronBratcher/TableViewHelper
Ich finde den von Apple bereitgestellten Code in vielerlei Hinsicht problematisch:
Bei statischen Zelltabellen definiere ich meine Datumsauswahlzelle unter meiner Datumsanzeigezelle und habe ein Flag, das angibt, ob ich sie bearbeite. Wenn ja, gebe ich eine angemessene Zellenhöhe zurück, andernfalls gebe ich eine Zellenhöhe von Null zurück.
Wenn auf die Zeile mit dem Datum geklickt wird, ändere ich das Flag und führe die Aktualisierungsanimation durch, um die Auswahl anzuzeigen.
Wenn ich mehrere Datums- / Zeitauswahlelemente in derselben Tabelle habe, setze ich die Flags beim Klicken entsprechend und lade die entsprechenden Zeilen neu. Ich habe festgestellt, dass ich meine statische Tabelle behalten, viel weniger Code verwenden und leichter verstehen kann, was passiert.
quelle
Mit dem Storyboard und einer statischen Tabelle konnte ich mit dem folgenden Code das gleiche Ergebnis erzielen. Dies ist eine großartige Lösung, denn wenn Sie viele ungewöhnlich geformte Zellen haben oder mehrere Zellen haben möchten, die dynamisch angezeigt / ausgeblendet werden, funktioniert dieser Code weiterhin.
quelle
[tableView reloadData];
Anruf ist nicht erforderlich. Derzeit deaktiviert es die Zeilenauswahl, aber es ist besser, die Auswahl der Zeile wie[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
Ich habe die DateCell-Quelle von Apple übernommen und die Storyboard-Datei entfernt.
Wenn Sie eines ohne Storyboard wünschen, schauen Sie unter: https://github.com/ajaygautam/DateCellWithoutStoryboard
quelle
UIDatePicker
mitUIPickerView
. Ich habe einige Dinge ausprobiert und konnte siepickerView
auf jeder Zelle anzeigen, aber sie wird nicht mit jeder Zelle aktualisiert. Ich habe meine Frage und meinen Code hier gepostet . Bitte schauen Sie mal rein und es wäre sehr nett, wenn Sie mir eine Lösung vorschlagen könnten.UIDatePicker
mitUIPickerView
aber mit paar Bugs. 1. Es stürzt ab, wenn SieUIPickerView
die Tabelle öffnen und scrollen. 2. Der Wert wird automatischUILabel
Detail in den unteren Zeilen der Tabelle zugewiesen, wenn Werte der Beschriftung Details in den oberen Zeilen zugewiesen werden. Hier ist mein CodeEines der besten Tutorials dazu ist iOS 7 Inline UIDatePicker - Teil 2 . Grundsätzlich verwende ich hier statische Tabellenansichtszellen und implementiere einige zusätzliche Methoden. Ich habe dafür Xamarin und C # verwendet:
Du musst aktiv sein
Clip Subviews
.Höhe einstellen:
Als eine Klassenvariable:
private bool datePickerIsShowing = false;
Datumsauswahl anzeigen:
Datumsauswahl ausblenden:
Und diese Funktionen aufrufen:
quelle
Ich habe meinen eigenen benutzerdefinierten Ansichts-Controller erstellt, um das Hinzufügen einer Inline-Auswahl in einer Tabellenansicht zu vereinfachen. Sie unterteilen es einfach und befolgen einige einfache Regeln. Es behandelt die Präsentation der Datumsauswahl.
Sie finden es hier zusammen mit einem Beispielprojekt, das die Verwendung demonstriert: https://github.com/ale84/ALEInlineDatePickerViewController
quelle
Ich habe eine Antwort auf einen Fehler im Beispiel für die Datumszelle von Apple gefunden, bei dem eine Zeile unter der letzten Datumszelle stehen muss, sonst wird eine Fehlermeldung angezeigt. In der CellForRowAtIndexPath-Methode ersetzen Sie die ItemData-Zeile durch
Nach dem Ersetzen des Beispielcodes kann ich jetzt eine datePicker-Zelle anzeigen, ohne dass sich eine Zelle darunter befindet.
Ich bin gerade zu stackoverflow gekommen. Wenn dies also am falschen Ort oder woanders ist, entschuldige ich mich.
quelle
Die Antwort von Aaron Bratcher funktionierte nur in mehreren Abschnitten. Die Animationen waren etwas abgehackt und die nächsten Abschnitte liefen nicht sehr gut nach unten. Um dies zu beheben, habe ich die nächsten Abschnitte durchlaufen und die Zeilen um den gleichen Betrag wie die Höhe der Datumsauswahl nach unten verschoben.
Ich habe den didSelectRowAtIndexPath wie folgt bearbeitet:
quelle
Hinzufügen zu den vorherigen Antworten,
Ich habe sowohl @datinc- als auch @Aaron Bratcher-Lösungen ausprobiert. Beide haben hervorragend funktioniert, aber die Animation war in einer gruppierten statischen Tabellenansicht nicht so sauber.
Nachdem ich ein bisschen damit gespielt hatte, kam ich zu diesem Code, der sauber und großartig für mich funktioniert -
Die Hauptänderung ist zu verwenden -
Um die Zeile zu aktualisieren, werden auf diese Weise die restlichen Tabellenabschnitte und Zellen nicht animiert.
Hoffe es hilft jemandem.
Shani
quelle
Hinzufügen zu den vorherigen Antworten und @ Aaron Bratcher-Lösung ...
Seit iOS 9 bekam ich abgehackte Animationen, und das Laden der Tabelle dauerte eine Weile und war nervig genug. Ich habe es auf die Datumsauswahl beschränkt, die nur langsam vom Storyboard geladen wird. Das programmgesteuerte Hinzufügen der Picker anstelle des Storyboards verbesserte die Ladeleistung, und als Nebenprodukt ist die Animation flüssiger.
Entfernen Sie die Datumsauswahl aus dem Storyboard und haben Sie eine leere Zelle, in der Sie die Höhe wie in den vorherigen Antworten festlegen. Rufen Sie dann eine Initialisierung für viewDidLoad auf:
Dann implementieren Sie die Aktion zB
Dadurch wird die Tabelle viel schneller als zuvor geladen. Sie entfernen auch die Animationslinie aus,
didSelectRowAtIndexPath
da sie ohne sie reibungslos animiert (ymmv).quelle
Die Verwendung dieser Antwort ohne Animation funktioniert in iOS 8.1 ordnungsgemäß. Ich habe es unten in Swift umgewandelt:
quelle
Hier ist eine andere Möglichkeit, das Problem ohne statische konstante Zahlen zu lösen. Alle Zellen können in statischen und dynamischen Tabellenansichten verwendet werden. Diese Methode verwendet eine einzelne Zelle sowohl für die Titel- als auch für die Datumsauswahl!
Übrigens können Sie so viele Dattelwähler in Ihrem Tisch haben, wie Sie möchten!
Erstellen Sie eine UITableViewCell- Unterklasse:
Erstellen Sie eine CPDatePickerTableViewCell- Klasse aus unserer CPTableViewCell
Implementieren Sie in Ihrem View Controller diese beiden Delegate-Methoden
Beispiel zum Einrichten von Einschränkungen im Interface Builder
Zusätzlich habe ich benutzerdefinierte Zellklassen für UITextField und UITextView geschrieben, wobei tableView: didSelectRowAtIndexPath: aufgerufen wird, wenn cell ausgewählt ist!
CPTextFieldTableViewCell
CBTextViewTableViewCell
Die Zellenhöhe ist dynamisch und die Zeile wächst, wenn der Text in eine neue Zeile eingeschlossen wird!
quelle
Der einfachste Weg, DateCell in der Swift-Version zu verwenden: Verwenden Sie dieses Beispiel .
Ziehen Sie die Klasse " DateCellTableViewController.swift " in Ihr Projekt.
Öffnen Sie "Main.storyboard" und kopieren Sie das " DateCell " ViewController-Objekt und fügen Sie es in Ihr Storyboard ein.
quelle