Переход из ячеек UITableView в Swift можно реализовать несколькими способами. Ниже я расскажу о двух наиболее распространенных способах.
Способ 1: Программно
1. Сначала вам необходимо установить идентификатор для вашего контроллера назначения (в который вы хотите перейти). Можете сделать это в Interface Builder, задав идентификатор в поле "Storyboard ID", либо программно, используя свойство storyboardIdentifier
:
let destinationStoryboard = UIStoryboard(name: "Main", bundle: nil) guard let destinationVC = destinationStoryboard.instantiateViewController(withIdentifier: "DestinationViewController") as? DestinationViewController else { return }
2. В вашем классе, который является источником данных для UITableView, вы должны перейти на контроллер назначения при выборе ячейки. Чтобы это сделать, вы можете использовать метод tableView(_:didSelectRowAt:)
, который вызывается автоматически при выборе ячейки:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let destinationStoryboard = UIStoryboard(name: "Main", bundle: nil) guard let destinationVC = destinationStoryboard.instantiateViewController(withIdentifier: "DestinationViewController") as? DestinationViewController else { return } // Передача данных, если это необходимо destinationVC.someData = dataArray[indexPath.row] // Выполнение перехода navigationController?.pushViewController(destinationVC, animated: true) }
Способ 2: С использованием Segue
1. В вашем контроллере назначения установите идентификатор segue, используя Interface Builder
. Укажите этот идентификатор, чтобы выполнить переход:
2. В вашем классе, который является источником данных для UITableView вы должны выполнить переход по segue в методе tableView(_:didSelectRowAt:)
:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { performSegue(withIdentifier: "DestinationSegue", sender: self) }
3. Чтобы передать данные на контроллер назначения, используйте метод prepare(for:sender:)
. Вам нужно проверить идентификатор segue и установить данные:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "DestinationSegue" { if let destinationVC = segue.destination as? DestinationViewController { // Передача данных destinationVC.someData = dataArray[indexPath.row] } } }
В обоих способах вам необходимо убедиться, что вы правильно настроили ваши переходы в Main.storyboard
или другом файле интерфейса. Проверьте, что ваш UITableView корректно соединен с вашим источником данных и делегатом