Почему я не могу вызвать reloadData AND deselectRowAtIndexPath в viewWillAppear: одновременно анимированный? - PullRequest
2 голосов
/ 24 июня 2011

У меня есть UITableView с ячейками, которые выбирают viewControllers в стек при выборе.Дочерние viewControllers принимают пользовательский ввод и затем извлекаются из стека.

Когда дочерний viewController извлечен, я хочу, чтобы родительский tableView обновил значение выбранной ячейки И затем отменил выбор строки.Я могу обновить ячейку, используя reloadData, и я могу отменить выбор строки, используя deselectRowAtIndexPath - , но я не могу сделать оба одновременно .

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

Весь код находится в viewWillAppear: анимированный - я могу приблизиться, если поместить deselectRowAtIndexPath в viewWillAppear и reloadData в viewDidAppear, но это не то, что мне нужно.

Ответы [ 2 ]

8 голосов
/ 24 июня 2011

Когда вы перезагружаете ячейку, она автоматически отменяется.Это потому, что вы не устанавливаете свойство selected ячейки в YES в tableView:cellForRowAtIndexPath:.Так что вам придется иметь дело с этим по-другому.Либо определите, что ячейка в indexPath должна быть selected, и соответственно установите для ее свойства selected значение YES в tableView:cellForRowAtIndexPath:, либо выберите ее после перезагрузки данных.В этом случае вы можете выполнить следующие методы -

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                      withRowAnimation:UITableViewRowAnimationNone];

[self.tableView selectRowAtIndexPath:indexPath 
                            animated:NO
                      scrollPosition:UITableViewScrollPositionNone];

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

Порядок шагов: -

  1. Перезагрузить строку без анимации.
  2. Выбратьстрока без анимации.
  3. Отмените выделение строки с анимацией.

Таким образом, я думаю, вы можете получить нужный эффект.

0 голосов
/ 24 июня 2011

Когда пользователь впервые нажимает на строку для загрузки редактируемого контроллера представления, отмените выбор UITableViewCell перед загрузкой редактируемого ViewController.

...