2013-02-17 19 views
7

często trzeba ustawić widok tabeli komórki do początkowego wybranego stanu, dla którego używam następujący kod:Wybierz komórkę widoku tabeli programowo: selectRowAtIndexPath vs setSelected

[self.tableView selectRowAtIndexPath:indexPath 
    animated:NO scrollPosition:UITableViewScrollPositionNone]; 
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
[cell setSelected:YES]; 
cell.accessoryType = UITableViewCellAccessoryCheckmark; 

używam selectRowAtIndexPath:indexPath i setSelected:YES w taki sam czasie, ponieważ nie w pełni rozumiem, który z obu sposobów jest preferowanym sposobem programowego wybierania komórki.

Którą z tych instrukcji należy użyć i dlaczego?

Odpowiedz

6

wierzę sposób chcesz użyć jest selectRowAtIndexPath:animated:scrollPosition:. Zwykle należy pozostawić zarządzanie stanem komórki w widoku tabeli. W przypadku wyboru przechowuje i przechowuje zestaw wybranych ścieżek indeksu, więc właściwy wiersz pozostanie zaznaczony po ponownym użyciu innej komórki. Nie ma potrzeby wywoływania obu metod, jest po prostu zbędny.

+0

Dziękuję, @Nicky! Po użyciu 'selectRowAtIndexPath: animated: scrollPosition:' Chciałbym ponownie załadować tabelę i ustawić znacznik wyboru w 'cellForRowAtIndexPath' w zależności od stanu zaznaczenia komórki (' isSelected')? – AlexR

+0

Cóż, zwykle przechowuję zaznaczone elementy w oddzielnej usłudze, to wydaje się bardziej wyraźne. Tak więc w 'tableView: didSelectRowAtIndexPath:' wykonaj następujące czynności: wczytaj dwa wiersze, poprzednio zaznaczone i jeden użytkownik kliknął (bez animacji), zaznacz kliknięty wiersz (także bez animacji), a następnie odznacz go jako animowane, aby uzyskać ładny efekt wizualny. Wszystko to odbywa się poprzez wywołanie metod widoku tabeli. – Nicky

+0

Potrzebny jest dodatkowy wybór, ponieważ komórka utraci ją po ponownym załadowaniu. Możesz po prostu ustawić typ akcesoriów i bez problemu przeładować/wybrać, chociaż wolę nie powielać żadnej części logiki konfiguracji komórki. Kto wie, może jutro będę używał fantazyjnych niestandardowych znaków kontrolnych lub innych szalonych rzeczy :) – Nicky

Powiązane problemy