2016-02-16 6 views
0

Итак, у меня есть 2 Вид контроллеров:Как передать информацию из ячейки представления таблицы в один контроллер представления на другой контроллер представления?

  1. A Таблица View Controller со списком имен клуба, который может быть нажата. Он имеет собственный класс под названием ClubsTableViewController.
  2. A View Controller, который я буду использовать для отображения описания клуба, который нажат. Я хочу повторно использовать этот контроллер просмотра для отображения различной информации, основанной на том, какой клуб нажат. Он имеет собственный класс, называемый ClubDetailViewController.

Two view controllers Я создал перетекает между каждой таблице с ячейки таблицы View Controller и второй View Controller и каждый имеет переход идентификатор «showClubDetails».

У меня есть следующий метод в файле ClubsTableViewController.swift:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "showClubDetails" { 
     let detailsController = segue.destinationViewController as! ClubDetailViewController; 
     if let name = self.view.viewWithTag(1) as? UILabel { 
      detailsController.clubNameString = name.text! 
      detailsController.clubDescriptionString = clubDescriptions[name.text!]! 
     } 
    } 
} 

Я использую этот метод, чтобы передать имя клуба, которая была нажата с 1-го контроллера представления ко второму. Вышеприведенный код работает для 1-й ячейки таблицы («Amnesty International» на изображении выше), потому что я дал ей тег 1.

Однако, я хочу передать имя любого клуба, который нажал второй контроллер представления, и я не совсем уверен, как это сделать. Любая помощь будет оценена по достоинству. Спасибо!

+0

Назовите себя, когда ячейка выбрана для выполнения функции. Используйте один сеанс от VC1 до VC2 (ClubDetailViewController). – Larme

ответ

-1

Ваш переход должен выглядеть следующим образом:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
if segue.identifier == "showClubDetails" { 

    let indexPath:NSIndexPath = tableView.indexPathForSelectedRow! 

    let detailsController = segue.destinationViewController as! ClubDetailViewController; 

     detailsController.clubNameString = names[indexPath.row] 
     detailsController.clubDescriptionString = clubDescriptions[indexPath.row] 
} 

}

EDIT:

indexPath принимает индекс ваших клубов, а затем правильно отправить название клуба из массива , Это означает, что имена клубов должны быть в массиве (так же, как описание клубов).

+0

Я использовал строку: detailsController.clubDescriptionString = clubDescription [clubNames [indexPath.row]]! вместо этого, потому что я храню описания как значения в словаре, и это сработало. Спасибо! – Iavor

0

Не вводите название своего клуба в тег вида.

Вместо этого используйте tableView.indexPathForSelectedRow.row, чтобы получить индекс. Что-то вроде let clubName = clubNames[tableView.indexPathForSelectedRow.row] где clubNames - это массив с названиями клубов.

Edit:

Я не видел, вы использовали статические клетки. Отправитель - это ваш UITableViewCell, поэтому вы можете захватить ярлык таким образом.

let cell = sender as! UITableViewCell 
let clubName = cell.textLabel.text 
+0

Я пробовал то, что вы предложили, и получил следующую ошибку: Неустранимая ошибка: неожиданно найден nil при разворачивании необязательного значения Точка останова была в следующей строке: let clubName = cell.textLabel! .text! – Iavor

+0

Добавили ли вы себя в клетку? Или вы используете стиль таблицы со списком по умолчанию? –

+0

Я добавил ярлык каждой статической ячейке. Каков стиль таблицы со списком по умолчанию? – Iavor

Смежные вопросы

 Смежные вопросы