Intereting Posts
Анализ одного и того же имени элемента в iphone Mashape Objective-C для iOS – MashapeResponse для объекта JSON iOS – изменение размеров элементов на экране в зависимости от количества элементов Codename Однострочный нижний колонтитул в прокручиваемом макете Объектив-C: (странный) UIButton frame NSLogs отличается от координат, где он отображается (и получает штрихи) Уведомление XMPP Push для приложения для чата iOS Ошибка Apple Mach-O Linker для всех моих приложений Ошибка API YouTube v3: 403, но ключ API настроен, и идентификатор Bundle верен Отправка __NSCFString в объект NSEntityDescription: forForName: inManagedObjectContext: возвращает nil Досягаемость достижимости ReachableViaWiFi при подключении к 3G Как обеспечить встроенную поддержку неподдерживаемых API-интерфейсов WebRTC JS в WebKit (WkWebview) TabBar в приложении iphone foursquare Не удается получить данные из локальной базы данных после сохранения из Parse in ios Слияние датчиков с компасом и гироскопом: от 0 до 360 градусов Как разрешить двум перекрывающимся представлениям получать события пользовательского касания ios

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 и т. Д.