2011-01-28 12 views
8

Wystąpił problem podczas implementacji UITableView w aplikacji na iOS, nad którą pracuję (pakiet SDK dla systemu iOS 4.2). Jeśli stuknę komórkę w widoku tabeli, a następnie przewiń widok tak, aby komórka opuszczała ekran, po jej przywróceniu wybrana została ostatnio wybrana komórka.UITableViewCell zostaje ponownie zaznaczone po przewinięciu z powrotem na ekranie

Aby to sprawdzić stworzyłem nowy projekt View Based Application, wyciągnięty z UITableView w konstruktorze Interface i ustawić kontroler widoku za źródłem danych widoku tabeli i delegata i umieścić następujący kod w kontrolerze widoku:

- (NSInteger)numberOfSectionsInTableView:(UITableView *) tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger) section { 
    return 12; 
} 

- (UITableViewCell *)tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath { 
    static NSString *cellID = @"aCellID"; 

    UITableViewCell *aCell = [tableView dequeueReusableCellWithIdentifier:cellID]; 

    if (!aCell) { 
     aCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID] autorelease]; 
    } 

    aCell.textLabel.text = [NSString stringWithFormat:@"Cell %d", indexPath.row +1]; 

    return aCell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *aCell = [tableView cellForRowAtIndexPath:indexPath]; 
    [aCell setSelected:NO animated:YES]; 
} 

Podczas uruchamiania tego (w symulatorze lub na urządzeniu), jeśli miałbym dotknąć dowolnej komórki (np. Komórki 12), byłby zaznaczony i odznaczony. Następnie, bez aktualnie zaznaczonych komórek w tabeli, jeśli przewinę widok tak, aby ostatnia wybrana komórka (w tym przypadku 12) opuściła ekran, zostanie ponownie wybrana, gdy pojawi się ponownie.

Czy jest to domyślne zachowanie dla UITableView? A może błąd w mojej implementacji? Jaki byłby najlepszy sposób, aby odznaczyć tę komórkę w tej sytuacji?

Odpowiedz

13

Zajęło mi prosząc, aby dowiedzieć się ten jeden:

Mój problem został stosując metodę setSelected:UITableViewCell zamiast przy użyciu metody deselectRowAtIndexPath:UITableView.

+0

dzięki! Miałem ten sam problem. – Marky

+0

Czy nadal możesz odtworzyć animację w miejscu, w którym wybiera ją na krótką chwilę, a następnie odznacza ją zaraz po? – chourobin

+0

@ cr54 Tak, nadal można uzyskać taki efekt animacji takiego: - (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath { [tableView deselectRowAtIndexPath: indexPath animowany: YES]; } –

Powiązane problemy