2017-11-15 2 views
0

Ich habe eine TabelleView mit allowsMultipleSelection auf True festgelegt. In einer benutzerdefinierten UITableViewCell-Unterklasse habe ich überschrieben. Dies wird aufgerufen, wenn ich Zellen auswähle (durch Antippen), und auch wenn ich scroll, wenn Zellen wiederverwendet werden. Nun würde ich erwarten, dass der Anwendungsfall des Parameters animated so ist, dass die Auswahl für die Benutzerinteraktion animiert werden kann und nicht animiert werden kann, wenn sich der Zustand aufgrund der Wiederverwendung von Zellen einfach ändert. animated wird jedoch immer als falsch übergeben, unabhängig davon, wie dies aufgerufen wird. Ist animated immer wahr, wenn dies von UIKit-Sachen aufgerufen wird?Lassen Sie UITableView Auswahl animieren, wenn vom Benutzer initiiert

Natürlich kann ich explizit zwischen Benutzer-Interaktion und Zell Wiederverwendung unterscheidet durch (a) allowsMultipleSelection Entfernen, (b) die Umsetzung UITableViewDelegate ‚s didSelect und didDeselect Methoden, und (c) Aufruf setSelected mit animated: true aus diesen beiden Methoden. Aber das scheint eine Menge nativen Verhaltens zu duplizieren, nur um ein kleines Detail zu ändern; Ich könnte eine Delegiertenimplementierung speichern und meinen Code intuitiv lesen lassen (zumindest für mich), wenn ich irgendwie erreichen könnte, dass das TableView animated: true standardmäßig übergibt, wenn die Auswahl oder Abwahl vom Benutzer initiiert wird. Gibt es eine Möglichkeit, TableViews dies zu tun?

EDIT: nicht zu erwähnen, ausdrücklich setSelected von dem didSelect und didDeselect Delegatmethoden Aufruf wirklich nicht funktioniert, weil es immer noch auch durch die Tableview genannt wird.

Antwort

0

ich bin vorausgesetzt, Sie die Zelle mit

cell.isSelected = true 

Die Auswahl sind die Auswahl beeinflusst das Aussehen von Etiketten, Bild und Hintergrund. Wenn der ausgewählte Status einer Zelle auf "true" gesetzt ist, wird der Hintergrund für ausgewählte Zellen mit dem Titel in weiß gezeichnet. Der Standardwert ist false. Wenn Sie den Auswahlstatus über diese Eigenschaft auf true festlegen, wird der Übergang zum neuen Zustand nicht animiert. Informationen zu animierten Übergängen im ausgewählten Zustand finden Sie in der Methode setSelected (_: animated :).

Wie Sie sehen können, hat die Verwendung von isSelected den animierten Übergang mit false standardmäßig.

Versuchen Sie stattdessen:

cell.setSelected(true, animated: true) 

Documentation

+0

Ich spreche eigentlich über das, was passiert, wenn ein Benutzer auf eine Zelle tippt. Ich selbst führe keinen Code; Der Tap wird von der TableView erkannt, und 'setSelected' wird automatisch mit Parametern aufgerufen, die ich anscheinend nicht kontrollieren kann. –

+0

Wenn ich richtig verstanden habe, müssen Sie super mit den richtigen Parametern aufrufen. Versuchen Sie folgendes: override func setSelected (_ ausgewählt: Bool, animiert: Bool) { super.setSelected (ausgewählt, animiert: true) } – lopes710

+0

Nein, das ist nicht was ich meine. Ich möchte _use_ 'animated' verwenden, um zu entscheiden, ob meine benutzerdefinierte Version von' setSelected' eine Animation ausführen soll oder nicht. Ich möchte also, dass das TableView mit "animated = true" aufruft, wenn ich auf eine Zelle tippe. Ich sehe nicht, dass irgendetwas, was ich in meiner Implementierung von 'setSelected' ändere, die Parameter beeinflussen wird, mit denen es aufgerufen wird. Sagen wir es so: 'setSelected' wird automatisch (nicht von mir) aufgerufen, aber immer mit' animated = false' aufgerufen. Kann ich etwas tun, so dass es von der tabellarischen Ansicht mit animated = true aufgerufen wird (ohne es selbst aufzurufen)? –

Verwandte Themen