Откройте новый контроллер просмотра, нажав "Ячейка в виде таблицы" - Swift iOS
У меня есть следующая функция onClick
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
let row = indexPath.row
println("Row: \(row)")
println(meetingArray[row] as! String)
}
который печатает текст на ячейке, которая нажата. Он работает нормально.
Мне просто интересно, как бы вы установили функцию, которая наведет вас на новый контроллер представления
Ответы
Ответ 1
Программный:
let destination = UIViewController() // Your destination
navigationController?.pushViewController(destination, animated: true)
Раскадровка:
Сначала вам нужно будет установить идентификатор для вашего представления. На скриншоте ниже вы можете увидеть, куда вводить идентификатор.
![screenshot]()
После этого вы можете создать "пункт назначения" и нажать его на контроллер навигации, используя следующий код:
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let destination = storyboard.instantiateViewController(withIdentifier: "YourViewController") as! YourViewController
navigationController?.pushViewController(destination, animated: true)
Segue:
Сначала вам нужно будет установить идентификатор для вашего segue, как показано ниже:
![segue1]()
![segue2]()
performSegue(withIdentifier: "segue", sender: self)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segue" {
// Setup new view controller
}
}
EDIT: обновлено для Swift 3.x
Ответ 2
В раскадровке задайте раскадровую панель вашего монитора viewController в Identity Inspector.
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
let row = indexPath.row
println("Row: \(row)")
println(meetingArray[row] as! String)
let secondViewController = self.storyboard.instantiateViewControllerWithIdentifier("storyBoardIdFor your new ViewController") as SecondViewController
self.navigationController.pushViewController(secondViewController, animated: true)
}
Ответ 3
при использовании,
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
Значение выбранной строки переходит к другому контроллеру представления слишком поздно.
Вам лучше передать выбранную строку в func prepareForSegue, как показано ниже,
сначала объявите глобальную переменную для передачи значения другому viewController
var globalVar:Int
В приложении на основе раскадровки вы часто захотите немного подготовиться к навигации
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
let selectedIndex = self.tableView.indexPathForCell(sender as! UITableViewCell)
globalVar = selectedIndex!.row
print("tableView prepareForSegue: " + String(globalVar))
}
Ответ 4
Для других пользователей, приходящих на этот вопрос, если у вас есть статические ячейки в UITableViewController
, вы можете просто управлять перетаскиванием из ячейки в новый контроллер просмотра.
![введите описание изображения здесь]()
Вы также можете сделать это на динамических ячейках, если вам не нужно передавать какие-либо данные в следующий контроллер просмотра. Однако, если вам нужно передать данные, вы должны сделать segue из самого контроллера представления Table View, а не ячейки. Затем вызовите segue программно.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.performSegue(withIdentifier: "mySegueIdentifier", sender: self)
}