Подтвердить что ты не робот

Откройте новый контроллер просмотра, нажав "Ячейка в виде таблицы" - 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)

}

который печатает текст на ячейке, которая нажата. Он работает нормально.

Мне просто интересно, как бы вы установили функцию, которая наведет вас на новый контроллер представления

4b9b3361

Ответ 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)
}