Я пытаюсь реализовать функцию Peek & Pop с помощью 3D Touch. Я следую рекомендациям на веб-сайте Apple.

Это говорит о том, что я должен получить путь индекса текущей выбранной ячейки в моем методе подготовки к segue следующим образом:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let selectedTableViewCell = sender as? UITableViewCell,
         let indexPath = tableView.indexPath(for: selectedTableViewCell)
         else { preconditionFailure("Expected sender to be a valid table view cell") }

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

Когда я получаю путь индекса таким образом:

guard let indexPath = tableView.indexPathForSelectedRow else {fatalError()}

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

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

-2
chnski 27 Мар 2019 в 23:16

2 ответа

Лучший ответ

Непонятно, почему эта ошибка возникает после изменения кода, как предложено @vadian.

Это была моя единственная идея тоже. Мы должны увидеть остальную часть вашего кода, я думаю, что это должно быть проблемой где-то там. Без этого я думаю, что никто не может сказать больше ничего.

Тем не менее, я думаю, что вы можете что-то сделать (хотя это не решение вашей первоначальной проблемы): Если вы следуете учебнику Apple, как вы сказали, вы уже указали путь индекса в своем методе previewingContext(_:viewControllerForLocation:). Если это сработает, вы сможете манипулировать данными, которые вам нужны. И когда вы переходите к другому VC, вы можете использовать indexPathForSelectedRow, который, как вы упомянули, работает, когда вы выбираете, но не когда вы смотрите. Не видя остальной код, это лучшее, что я могу сделать.

0
lajosdeme 27 Мар 2019 в 20:56

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

0
vadian 27 Мар 2019 в 20:31