У меня есть UIViewController, содержащий специальный UITableView. В столе тоже есть кастомный UITableViewCell.
Как перейти от первого ViewController к другому, когда вы выбираете / щелкаете одну из строк?
Я не использовал StoryBoard.
Это мой код. Каждый из классов является внешним файлом. Дайте мне знать, если вам понадобится больше кода.
class TestViewController: UIViewController, UITableViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
view.addSubview(testTableView)
}
let testTableView: TestTableView = {
let table = TestTableView()
table.register(TestTableViewCell.self, forCellReuseIdentifier: TestTableViewCell.identifier)
return table
}()
}
class TestTableView: UITableView, UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: TestTableViewCell.identifier, for: indexPath)
return cell
}
}
class TestTableViewCell: UITableViewCell {
static let identifier = "testCell"
}
Что вы пробовали до сих пор?
@ MoAbdul-Hameed Как выбрать строку в контроллере?
@mahan Вам необходимо сделать ваш текущий контроллер представления (тот, который содержит представление таблицы) совместимым с UITableViewDelegate и реализовать его метод didSelectRowAtIndexPath.
@RakeshaShastri Добавил код.





override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vc = yourCustomVCName (nibName: "yourCustomVC nibName" , bundle : nil)
self.present(vc, animated: true , completion: nil)
}
Вот полный ответ:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let newViewController = NewViewController()
self.navigationController?.pushViewController(newViewController, animated: true)
}
Вы не вызываете этот метод, это метод делегата. Вам нужно установить делегата вашего табличного представления в качестве вашего первого контроллера представления. В viewDidLoad добавьте: self.tableView.delegate = self.
В UIKit программную навигацию с TableCell можно делать без раскадровки.
У вас есть два способа просмотреть следующий viewController
анимация снизу вверх (одна вещь, которую следует запомнить) вы не можете представить новое представление, не закрывая предыдущий представленный экран, в противном случае произойдет сбой приложения из-за конфликта представленного экрана
yourTableView.deselectRow(at: indexPath, animated: true)//used for single Tap
let vC = YourViewController (nibName: "" , bundle : nil)
vC.modalPresentationStyle = .fullScreen //this line is optional for fullscreen
self.present(vC, animated: true , completion: nil)
анимировать справа налево
yourTableView.deselectRow(at: indexPath, animated: true)
let vC = YourViewController()
self.navigationController?.pushViewController(vC, animated: true)
Возможный дубликат Swift программно перейти к другому контроллеру представления / сцене