Как показывают ответы выше, вам необходимо явно отменить выбор строки. У вас есть два варианта того, как вы это делаете. Во-первых, отменить выбор строки сразу после выбора:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
...
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Это будет работать просто отлично, но есть альтернатива, и подход, принятый UITableViewController
, заключается в том, чтобы оставить выбранную строку, а затем отменить ее выбор при повторном появлении представления (после того, как контроллер, который вы нажимаете, выталкивается вне стека).
Это имеет небольшое преимущество в том, что пользователь видит проблеск своего предыдущего выбора, когда он возвращается, чтобы он мог видеть то, что он выбрал ранее.
Чтобы реализовать это, вам просто нужно переопределить viewWillAppear
:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}
Как я уже сказал, это то, что по умолчанию для реализации UITableViewController
'viewWillAppear:
делает так, если вы используете UITableViewController
и , а не , видя это поведение, вы должны проверить, что вы вызов super
реализации в вашем классе 'viewDidAppear:
.
Обновление (30 октября 2013 г.) : ну, это популярный ответ! Как справедливо отмечает Бен в комментариях, UITableViewController фактически делает это в viewWillAppear:
, а не viewDidAppear:
- это правильное время. Кроме того, вы можете включать и выключать это поведение с помощью свойства clearsSelectionOnViewWillAppear
UITableViewController. Я изменил свой ответ выше, чтобы отразить это.