Also, mein Problem ist ziemlich einfach. Ich habe eine UITableView in einem UIViewController. Die Tabellenansicht enthält dynamische Zellen (benutzerdefinierte Zellen mit Bildern, Text usw. aus einer von mir erstellten Unterklasse), und diese Zellen gehören zu einer von mir erstellten Unterklasse. Alles läuft gut, da der Inhalt in jeder Zelle unterschiedlich ist. Das Problem ist, dass, wenn ich den scrollview der Zelle scrolle, die horizontal ist (ich habe ein UIScrollView in der Unteransicht der Zelle. Ich erstellte dieses scrollview auf der Zellenunterklasse), sagen wir zum Beispiel, indexPath.row == 0, und blättern die Tabellenansicht vertikal, nach etwa 8 Zellen, hat die neunte Zelle die Scrollansicht ebenfalls gescrollt. Dies liegt daran, dass die neunte Zelle tatsächlich die erste Zelle ist, die nur einen anderen Inhalt anzeigt, aber da es sich um die erste Zelle handelt, hat sie dieselbe Hintergrundoperation (die Bildlaufansicht scrollte).UITableViewCell mit scrollview wiederholen - welche Umgehungen gibt es?
Ich habe versucht, in den cellForRowAtIndexPath:
ausrollen aber obwohl dies das Problem löst es schafft eine andere: Die erste Zelle, die gescrollt wurde nicht mehr ist. Um dieses neue Problem zu lösen, möchte ich hier eine Problemumgehung hinzufügen, die ein Wörterbuch von [Int: Bool] ist, also den IndexPath, der einem booleschen Wert entspricht. Wenn ich die erste Zelle scrollte, dann 0: wahr. Wenn ich die neunte Zelle erreiche (die gleich der ersten Zelle ist, aber mit IndexPath = 8), scrollte ich die horizontale Scrollansicht der Zelle ab. Wenn ich an den Anfang der Tabellenansicht zurückkomme und die erste Zelle erreiche, scrolle ich den horizontalen Bildlauf der Zelle zurück. Was denkt ihr?
Die andere Problemumgehung, die ich mir vorstellen kann, besteht darin, wiederverwendbare Zellen nicht mehr aus der Warteschlange zu nehmen, da ich nicht glaube, dass ich mehr als 30 bis 50 Zeilen in meiner Tabellenansicht haben werde. In Bezug auf die Leistung, welche Operation ist besser?
Sie können die Methode -prepareForReuse für die Zellklasse implementieren, den Scrollview-Offset irgendwo speichern (nicht in der Zelle natürlich) und dann den contentOffset der scrollview der Zelle zurücksetzen. Wenn die Tabellenansicht eine zurückgegebene Zelle in -tableView zurückgibt: cellForRowAtIndexPath: Sie können den Offset der Scrollansicht auf den gespeicherten Wert setzen (wenn für diesen Indexpfad ein Offsetwert gespeichert ist). –