2016-09-25 6 views
0

Я пишу программу Xcode в Swift. У меня есть контроллер таблицы с несколькими метками и изображение на ячейку. Они имеют свои данные от первого контроллера представления. Все идет нормально. Теперь я хотел бы, чтобы пользователь нажимал на ячейку, которая открывает новый контроллер, который содержит те же данные метки и изображения, что и ячейка. С помощью следующего кода открывается новый контроллер, но я не знаю, как передавать данные. Если бы кто-то мог мне помочь, я был бы так благодарен.передать данные из таблицы view для просмотра контроллера

Вот коды, которые я предпочитаю использовать:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 


    let cellIdentifier = "TableView" 
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! TableView 


    let picture = pic[indexPath.row] 



    cell.label1.text = picture.name1 
    cell.photoImage.image = picture.photo 
    cell.label2.text = picture.name2 


    return cell 


} 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 


    tableView.deselectRowAtIndexPath(indexPath, animated: true) 


    let cell = indexPath.row 

    self.performSegueWithIdentifier("segue", sender: cell) 

} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "segue"{ 

     var row = tableView.indexPathForSelectedRow 

     let viewController = segue.destinationViewController as! vc2 

    } 

} 

PS: У меня SEGUE от изображения к новому контроллеру с идентификатором «Segue». PPS: Конечно, я пробовал следующий метод: Send data from TableView to DetailView Swift, но когда я запускаю свою программу, я получаю сообщение об ошибке с информацией, что мои метки неожиданно нашел ноль

+0

Вы подключили свои ярлыки к IBOutlets в вашем ViewController? –

+0

Да, ярлыки в ячейке подключены к файлу tableviewcell, а те, что находятся в контроллере назначения, подключены к их контроллеру – j3a3n3

ответ

0

Вам не нужно переопределить didSelectRowAtIndexPath или позвоните performSegueWithIdentifier, чтобы сделать это , Подключите ваш segue в файле IB, перетаскивая его из ячейки контроллера табличного представления во второй контроллер. Затем вы должны передать данные контроллеру в prepareForSegue, в segue.destinationViewController. Вы устанавливаете общедоступные свойства этого целевого контроллера.

Также убедитесь, что ваши метки в ячейке прототипа подключены в IB. Если они, они не должны быть ноль. Установите контрольную точку на cellForRowAtIndexPath, чтобы проверить это.

Если вы не говорите о ярлыках вашего контроллера назначения. Они также должны быть подключены в IB. Затем вы установите их в prepareForSegue. Вы получите соответствующие данные от

let viewController = segue.destinationViewController as! vc2 
var path = tableView.indexPathForSelectedRow 

viewController.destLabel.text = arrayData[path.row].myData // or whatever data you have from your model. 
+0

. Я сделал это так, как вы предложили. данные все еще не были переданы. Кроме того, я получаю ошибку (метка найденная nil) при попытке создать дополнительную ячейку :( – j3a3n3

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