UITableViewCells не отменяют выбор при возврате из segue
У меня есть UITableView с ячейками в раскадровке и segue, соединяющий ячейки с другим видом.
Когда вы выберете ячейку, отобразится анимация выбора ячейки (в моем случае она станет серым цветом), а другой экран отобразит экран. Но когда вы возвращаетесь к представлению таблицы, анимация отбраковки вообще не отображается (обратная сторона анимации выбора). Поскольку я просто использую segue, я ожидал, что по умолчанию позаботятся.
Есть ли способ заставить его показать анимацию отмены?
Ответы
Ответ 1
Не уверен в использовании segues, но я часто хочу обновлять данные, когда появляется контроллер представления. Однако, если вы перезагрузите таблицу, вы очистите строку выбора. Вот некоторый код, который я использую для поддержания выбранной строки и показываю анимацию отмены выбора при возврате. Возможно, это может помочь вам, поэтому я опубликую его здесь.
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSIndexPath *indexPath = [tableView indexPathForSelectedRow];
[tableView reloadData];
if(indexPath) {
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
}
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSIndexPath *indexPath = [tableView indexPathForSelectedRow];
if(indexPath) {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
}
Ответ 2
Это будет обрабатываться автоматически, если ваш контроллер представления был подклассом UITableViewController
и clearsSelectedOnViewWillAppear
был установлен в YES
(который является значением по умолчанию).
В вашем случае вы можете сделать это точно так же, как это делает UITableViewController
. Отмените выделение выбранной строки в -viewWillAppear:
.
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
[self.tableView deselectRowAtIndexPath:selectedIndexPath animated:YES];
}
Ответ 3
Убедитесь, что вы вызываете реализации super
методов viewWill...
и viewDid...
Ответ 4
Для Swift 3
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let path = tableView.indexPathForSelectedRow {
tableView.deselectRow(at: path, animated: true)
}
}
Ответ 5
Быстрое обновление: -
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(true)
if tableView.indexPathForSelectedRow != nil {
let indexPath: NSIndexPath = tableView.indexPathForSelectedRow!
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
}
Ответ 6
Обновление Better Swift:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if let path = tableView.indexPathForSelectedRow {
tableView.deselectRowAtIndexPath(path, animated: true)
}
}