J'ai une cellule uitableview en surbrillance lorsqu'un utilisateur la sélectionne, puis est poussée vers une vue détaillée. Je souhaiterais que la cellule ne soit pas mise en surbrillance lorsqu'elle revient au contrôleur de vue de table.
comment pourrais-je y parvenir?
Je devine [cell.textLabel setHighlighted:NO];
dans viewWillAppear, mais la cellule n'est pas déclarée si je la mets là.
merci pour toute aide
Si vous utilisez la sous-classe UITableViewController
, définissez simplement la propriété
self.clearsSelectionOnViewWillAppear = YES;
d'autre sur viewDidAppear il suffit d'appeler
NSIndexPath *indexPath = self.tableView.indexPathForSelectedRow;
if (indexPath) {
[self.tableView deselectRowAtIndexPath:indexPath animated:animated];
}
// MARK: - Swift 3
if let indexPath = tableView.indexPathForSelectedRow {
tableView.deselectRow(at: indexPath, animated: true)
}
Swift 3.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let selectionIndexPath = self.tableView.indexPathForSelectedRow {
self.tableView.deselectRow(at: selectionIndexPath, animated: animated)
}
}
essayer
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Deselect the row which was tapped
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
J'ai décidé d'en faire une réponse au lieu d'un commentaire.
Si vous utilisez storyboard: Cliquez sur votre UITableViewController -> Cochez la case "Selection: Clear on Appearance"
func clearOnAppearance() {
for indexPath in tableView.indexPathsForSelectedRows ?? [] {
tableView.deselectRow(at: indexPath, animated: true)
}
}
Ou d'une manière inélégante =)
NSArray *arrayWithPaths = [tableView indexPathsForVisibleRows];
for (NSIndexPath *path in arrayWithPaths)
{
[tableview deselectRowAtIndexPath:path animated:NO];
}