deselectRowAtIndexPath-Problem

7

Ich habe gerade angefangen, mit TableViews zu arbeiten, und ich habe 5 Zellen in einer Tabellenansicht in einem ViewController, der in einem navigationController eingebettet ist. Wenn eine Zelle gedrückt wird, wird eine andere Ansicht hineingedrückt. Mein Problem ist, dass die Zelle, die ich drücke, ausgewählt ist, aber die Auswahl nicht verschwindet. Ich habe es mit diesem Code versucht:

%Vor%

Die TableView wird in der viewDidLoad-Methode initialisiert.

Immer noch, wenn ich auf eine Zelle klicke, wird der neue viewController eingefügt, aber die Zelle bleibt ausgewählt. Was könnte das Problem hier sein?

    
Wilhelm Michaelsen 31.10.2013, 22:56
quelle

4 Antworten

33

Sie haben Ihren Code in didDeselectRowAtIndexPath abgelegt - setzen Sie ihn in didSelectRowAtIndexPath. Dies ist ein einfacher Fehler, da didDeselect vor didSelect in der Codevervollständigung erscheint.

    
Steve 31.10.2013, 22:59
quelle
3

Zusammenfassung :

  • Sie haben eine Tabellenansicht in einem ViewController, der sich in einem NavigationController befindet
  • Verwenden Sie eine Zelle berühren
  • Ein neuer ViewController drückt auf den NavigationController Stack
  • Der Benutzer schlägt zurück und kehrt zu dem Bildschirm zurück, auf dem Sie eine Tabellenansicht haben

Das verstehe ich aus Ihrer Frage.
Zu diesem Zeitpunkt sollte die Zelle in Ihrer TableView immer noch ausgewählt werden, damit der Benutzer die letzte Aktion, die er ausgeführt hat, erinnert, aber Sie möchten, dass er an diesem Punkt nicht ausgewählt wird (die Mailanwendung ist ein gutes Beispiel dafür) dieses Verhalten).

So ist der beste Ort, um die Zelle in Ihrer Tabellenansicht abzuwählen, in der - (void)viewDidAppear:(BOOL)animated -Methode des UIViewController, die die Tabellenansicht in ihrer Ansicht hat. Auf diese Weise können Sie dem Benutzer die Möglichkeit geben, die Auswahl zu sehen, bevor sie sanft wie in der Post verschwindet.

%Vor%

Sie können nil als Argument von deselectRowAtIndexPath übergeben, tableView behandelt es ordnungsgemäß.

    
Vincent Bernier 31.10.2013 23:52
quelle
2

Haben Sie auch tableView:didSelectRowAtIndexPath: implementiert? Diese Methode wird jedes Mal aufgerufen, wenn Sie auf eine Zelle tippen. Also solltest du deinen Code dort ablegen.

Die von Ihnen verwendete Methode tableView:didDeselectRowAtIndexPath: wird aufgerufen, wenn eine Zelle ausgewählt ist und Sie auf eine andere Zelle tippen.

    
yoeriboven 31.10.2013 23:00
quelle
1

Ich denke, dein Problem ist, dass du eine falsche Methode verwendest. Ändern Sie didDeselectRowAtIndexPath in didSelectRowAtIndexPath .

    
edzio27 31.10.2013 22:59
quelle