web-dev-qa-db-fra.com

Comment désélectionner une cellule uitableview lorsque l'utilisateur revient au contrôleur de vue

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

44
hanumanDev

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)
}
92
iiFreeman

Swift 3.

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if let selectionIndexPath = self.tableView.indexPathForSelectedRow {
        self.tableView.deselectRow(at: selectionIndexPath, animated: animated)
    }
}
18
Dustin Spengler

essayer

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Deselect the row which was tapped
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
7
Girish

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"

6
Alexander of Norway

Swift 3

func clearOnAppearance() {
    for indexPath in tableView.indexPathsForSelectedRows ?? [] {
        tableView.deselectRow(at: indexPath, animated: true)
    }
}
4
neoneye

Ou d'une manière inélégante =)

NSArray *arrayWithPaths = [tableView indexPathsForVisibleRows];
for (NSIndexPath *path in arrayWithPaths)
{
    [tableview deselectRowAtIndexPath:path animated:NO];
}
1
alex