2013-07-28 13 views
13

ich das Überschreiben der Standard UITableViewSelectionStyle Derzeit UITableViewSelectionStyleNone verwenden und dann die Farbe der Zelle basierend auf Delegatmethoden Wechsel:Entfernen UITableViewCell Auswahl

- (void)tableView:(UITableView *)tableView 
     didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];     
    [cell setBackgroundColor:[UIColor yellowColor]]; 
} 

- (void)tableView:(UITableView *)tableView 
    didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    [cell setBackgroundColor:[UIColor whiteColor]]; 
} 

- (void)tableView:(UITableView *)tableView 
    didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSLog(@"indexpath: %i",indexPath.row); 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    [cell setBackgroundColor:[UIColor whiteColor]]; 
} 

- (void)tableView:(UITableView *)tableView 
    didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    [cell setBackgroundColor:[UIColor whiteColor]]; 
} 

der Ausnahme, dass diese fast immer funktioniert, wenn ich eine Zelle markieren und dann ziehen meine Finger weg davon, ohne es tatsächlich auszuwählen, die Farbe ändert sich nicht zu Weiß ... wenn ich es auf [UIColor RedColor] setze, funktioniert es perfekt. Warum ist die ...

Edit:

Irgendwie, wenn ich den indexPath.row auszudrucken nach didUnhlightRowAtIndexPath ich "indexPath: 2147483647" von meinem NSLog

+1

indexPath '2147483647' entspricht' NSNotFound'. – Malloc

Antwort

29

Sie könnten versuchen:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
[tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

, wenn Sie wollen einfach nur das Highlight weg zu gehen, nachdem eine Zelle auswählen. Es sei denn, ich missverstehe deine Frage.

1

Durch eine lokale Instanz maintaing meine Mit indexPath konnte ich die zuletzt ausgewählte Zelle finden und ihre Farbe in Weiß ändern. Scheint wirklich ärgerlich, dass ich mich Zustand zu halten, aber es ist, was es ist ...

+1

nicht sicher, warum ich einen Downvote bekam ... nur erklären, wie ich mein eigenes Problem zum Wohle anderer auf Stack gelöst ... – Apollo

+1

Ja, ich fühle deinen Schmerz und hasse es, wenn das passiert .. +1 für Ihre Frage und antworte meinem Freund :) – abbood

+0

Sie müssen den Zustand nicht beibehalten. UITableView hat die Methode 'indexPathsForSelectedRows' – sosborn

13

Sie auch diese versuchen können

tableView.allowsSelection = NO; 

einen anderen Weg, dies zu tun

cell.selectionStyle = UITableViewCellSelectionStyleNone; 

eine weitere

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
[tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 
2

Hier ist ein Swift 2 version

if let indexPaths = self.tableView.indexPathsForSelectedRows { 
     for indexPath in indexPaths { 
      self.tableView.deselectRowAtIndexPath(indexPath, animated: true) 
     } 
    } 
2

Sie können es auch vom Storyboard aus tun. Wählen Sie die tableViewCell und unter Attribute Inspector Sie Selection können wählen> Keine

enter image description here

Verwandte Themen