Intereting Posts
Тест статической библиотеки с использованием XCTestCase Как я могу отобразить все доступные игровые панели игрового центра, а не автоматически показывать панель лидеров по умолчанию? Могу ли я получить доступ к данным приложения iOS для почты? Выноска SKmaps не работает Цель C: контур метода бесконечного геттера после преобразования в ARC Невозможно скомпилировать сторонний пакет для iOS с помощью инструментальной панели Kivy PJSIP для iOS – не может понять, как команды отправляются в приложении pjsua для iOS Установка openGL ES 1.1 по умолчанию в xcode 4 для iOS5 Проект, обновленный с Google Картона до Google VR, запускается в Unity, но не работает при создании для iOS (XCode или Unity Cloud Build) Тип результата NSDictionary извлекает объекты в отношениях UIView.animateWithDuration завершение Как использовать AudioFileStreamSeek с файлом потока? CLPlacemark «name» возвращает адрес улицы, а «проезд» возвращает только название улицы Как сохранить emoji в базе данных? Xcode – кнопка выглядит хорошо в раскадровке, но не на эмуляторе

Xcode 8 Table View Cells к различным представлениям

У меня возникают проблемы с привязкой view controllers к cells таблицы. В основном у меня есть 4 cells в моем представлении Table View , и я хочу, чтобы каждая ячейка present отдельный view controller при нажатии.

Вот мои быстрые коды:

 import UIKit var orchard = ["Dog", "Cat", "Bird", "Fish"] var myIndex = 0 class AnimalList: UITableViewController { // MARK: - Table view data source override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return orchard.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) cell.textLabel?.text = orchard[indexPath.row] return cell } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { myIndex = indexPath.row performSegue(withIdentifier: "segue", sender: self) } } 

Вот моя раскадровка, так как вы можете видеть, у меня есть 4 view controllers которые я хочу подключить к 4 table view cells . раскадровка

PS: Мой table view controller уже встроен в navigation controller .

Как мне это сделать? Спасибо!

  1. Встраивал ваш TableViewController в Navigation Controller (скорее всего, вы уже это сделали).

введите описание изображения здесь

  1. Выберите Желтый, отмеченный TableViewController щелкните Right Mouse кнопкой Right Mouse и поместите его в контроллер просмотра, отпустите и выберите Manual Segue -> Show

введите описание изображения здесь

  1. Теперь выберите segue и переименуйте его с помощью уникального идентификатора. Для каждого контроллера просмотра повторите шаги 2 и 3.

    введите описание изображения здесь

  2. Обновить tableView didSelectRowAt функцию делегата, как tableView didSelectRowAt ниже.

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { performSegue(withIdentifier: orchard[indexPath.row], sender: self) }

Дайте выделение для четырех ViewControllers и назовите его как vc1Segue , vc2Segue , vc3Segue , vc3Segue

И измените свой метод didSelectRowAt как didSelectRowAt ниже.

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { myIndex = indexPath.row switch myIndex { case 0: performSegue(withIdentifier: "vc1Segue", sender: self) case 1: performSegue(withIdentifier: "vc2Segue", sender: self) case 2: performSegue(withIdentifier: "vc3Segue", sender: self) case 3: performSegue(withIdentifier: "vc4Segue", sender: self) default: print("Index greater than vcs") } } 

Только сейчас я сделал демонстрационный проект с вашими требованиями, и он отлично работает.

Шаг 1: Подготовьте свою панель рассказов, как показано на рисунке ниже.

введите описание изображения здесь

Шаг2: Дайте идентификаторы раскадровки как dogID, catID, birdID, fishID в соответствующий viewController, как показано на рисунке ниже. введите описание изображения здесь step3: Объявите массив с указанными выше идентификаторами чуть ниже арки.

 var storyboardIds = ["dogID","catID","birdID","fishID"] 

step4: Измените метод didSelectRowAt, как показано ниже в фрагменте кода.

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { myIndex = indexPath.row if let vc = storyboard?.instantiateViewController(withIdentifier: storyboardIds[myIndex]) { self.navigationController?.pushViewController(vc, animated: true) } } 

Создайте segue для каждого из четырех контроллеров представления с помощью Ctrl + щелчок правой кнопкой мыши и перетаскивания из контроллера табличного представления на каждый из контроллеров представления. Дайте идентификатор сегментам (например, «TableToViewController1», «TableToViewController2» и т. Д.).

Затем в вашем didSelectRowAt сделайте что-нибудь вроде:

 var segueIdentifier = "" switch(indexPath.row) { case 0: // first cell is selected segueIdentifier = "TableToViewController1" case 1: segueIdentifier = "TableToViewController2" case 2: segueIdentifier = "TableToViewController3" case 3: segueIdentifier = "TableToViewController4" } performSegue(withIdentifier: segueIdentifier, sender: self) 

То, что вы можете сделать, находится внутри вашего

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { myIndex = indexPath.row performSegue(withIdentifier: "segue", sender: self) } 

func вы можете проверить, какой именно index и на основании того, что вы present viewController .

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { myIndex = indexPath.row if let animal = orchard[indexPath.row] as String? { if animal == "dog" { performSegue(withIdentifier: "dogViewController", sender: self) } } } 

В вашем storyboard вы создадите segue из viewController ко всем ur viewControllers и назовите segues с чем-то вроде dogViewController и т. Д.