iOS UITableView появляется дважды - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть два UITableViewControllers, скажем, первый - это пациент, второй - медицина.Нажатие на одну ячейку TableViewCell первого UITableView (пациента) приведет ко второму UITableView, который показывает лекарства этого выбранного пациента.У меня есть мой Show Segue, определенный на раскадровке.

Позвольте мне описать, с какой проблемой я иногда сталкиваюсь.Я нажимаю на одного пациента, он не сразу переходит на экран медицины.Навигация не стартует сразу.Через некоторое время, например, через полсекунды, я снова нажимаю на пациента, затем внезапно два контроллера UITableViewControl для медицины перемещаются влево, причем первый быстро покрывается вторым.Я уверен, что оба контроллера Medicine UITableViewController находятся в стеке Navagation Controller, потому что я могу нажать кнопку «Назад» в левом верхнем углу и все же перейти на первый экран «Медицина».

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

Итак, в чем проблема?Как я могу это исправить?Любой ресурс, связанный с этим?Пожалуйста помоги.


Раскадровка enter image description here


Код (PatientTVController.swift)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {        
    super.prepare(for: segue, sender: sender) // call parent

    guard segue.source is PatientTVController else {
        fatalError("Unexpected source: \(segue.source)")
    }
    guard let serviceTableViewController = segue.destination as? ServiceTVController else {
        fatalError("Unexpected destination: \(segue.destination)")
    }
    guard let selectedPatientCell = sender as? PatientTableViewCell else {
        fatalError("Unexpected sender: \(String(describing: sender))")
    }
    guard let indexPath = self.tableView.indexPath(for: selectedPatientCell) else {
        fatalError("The selected cell is not being displayed")
    }
    let selectedPatient = patients[indexPath.row]

    // set patient id here, 

}

1 Ответ

0 голосов
/ 23 февраля 2019

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

Попробуйте удалить текущий переход и установить новый переход из PatientTVController вместо ячейки UItableView, как показано на рисунке.Удерживая нажатой клавишу «Control», нажмите и перетащите с контроллера вида, чтобы создать новый переход.

New segue Selected segue

Выберите переход и перейдите к инспектору атрибутов и добавьте идентификатор к переходу.

Segue identifier

Используя метод didSelectRowAt, выполните переход программно

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    // You can catch the selected patient here and use it later when you need it.

    performSegue(withIdentifier: "yourSegueIdentifier", sender: nil)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...