Как отменить выбор ячейки uitableview, когда пользователь вернется к контроллеру представления
У меня есть ячейка uitableview, выделенная, когда пользователь ее выбирает, а затем переходит к подробному представлению. Я бы хотел, чтобы ячейка была не указана, когда они вернулись к контроллеру вида просмотра таблицы.
Как я могу это сделать?
Я предполагаю [cell.textLabel setHighlighted:NO];
в viewWillAppear, но ячейка не объявлена, если я ее там поставлю.
спасибо за любую помощь
Ответы
Ответ 1
Если вы используете подкласс UITableViewController
, тогда просто установите свойство
self.clearsSelectionOnViewWillAppear = YES;
else на viewDidAppear просто вызовите
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: animated)
}
Ответ 2
Swift 3.0
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let selectionIndexPath = self.tableView.indexPathForSelectedRow {
self.tableView.deselectRow(at: selectionIndexPath, animated: animated)
}
}
Ответ 3
Я решил ответить на этот вопрос вместо комментария.
Если вы используете раскадровку:
Нажмите на свой UITableViewController → Установите флажок "Отбор: очистить по появлению"
Ответ 4
попробовать
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Deselect the row which was tapped
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Ответ 5
Или какой-то неэлегантный путь =)
NSArray *arrayWithPaths = [tableView indexPathsForVisibleRows];
for (NSIndexPath *path in arrayWithPaths)
{
[tableview deselectRowAtIndexPath:path animated:NO];
}
Ответ 6
swift 3
func clearOnAppearance() {
for indexPath in tableView.indexPathsForSelectedRows ?? [] {
tableView.deselectRow(at: indexPath, animated: true)
}
}