Отмените выбор строки в UITableView, который является подпредставлением - PullRequest
3 голосов
/ 20 марта 2011

У меня есть UITableView, который добавляется к представлению как подпредставление. При выборе строки будет отображаться новый вид с pushViewController:, и у пользователя есть возможность нажать кнопку Назад, чтобы вернуться к UITableView, но затем ячейка все еще будет выбрана.

Есть ли способ отменить это, когда появляется представление?

Я прочитал, что должен использовать следующий код, но не могу заставить его работать. Нет ошибок, нет предупреждений, нет ничего.

[tableProgram deselectRowAtIndexPath:[tableProgram indexPathForSelectedRow] animated:NO];

Ответы [ 3 ]

9 голосов
/ 20 марта 2011

Вы должны отменить выбор строки в методе didSelectRowAtIndextPath делегата вашего UITableView. Это должно выглядеть примерно так.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    /* initialize your view controller here v and then push it */
    SomeViewController *v = [[[SomeViewController alloc] init] autorelease];
    [self.navigationController pushViewController:v animated:YES];
}

Не путайте его с didDeselectRowAtIndextPath методом - это происходит потому, что люди не обращают особого внимания при выборе методов от intelisense.

2 голосов
/ 21 марта 2011

Другое место, где вы можете использовать это внутри viewDidAppear

- (void)viewDidAppear:(BOOL)animated

и вставить следующий

NSIndexPath *indexPath = [tableView indexPathForSelectedRow];

[tableView deselectRowAtIndexPath:indexPath animated:YES];

Ячейка остается выбранной после нажатия и передачи на другой контроллер представления, но отменяет выбор, когда она возвращается к исходному контроллеру представления, поэтому она дает пользователю визуальную подсказку для последней выбранной строки.

0 голосов
/ 04 апреля 2011

цитата SimonBS :

попробовал это и надеялся, что это сработает получить анимацию) но кажется, что оба viewDidAppear: (BOOL) анимированные и viewWillAppear: (BOOL) анимированные не вызывается, когда в подпредставлении.

код от honcheng работает

-(void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSIndexPath *indexPath = [self.tableViewOutlet indexPathForSelectedRow];

    [self.tableViewOutlet deselectRowAtIndexPath:indexPath animated:YES];

}

вам просто нужно использовать его в суперпредставлении TableView. (Например: если у вас есть XIB-файл с подпредставлением TableView внутри представления, вам просто нужно перейти к соответствующему коду контроллера представления и переопределить viewWillAppear, я просто сделал это, и это работает! Привет визуальная реплика!)

...