2016-08-25 6 views
0

enter image description here Я пытаюсь переписать и передать данные (от UITableView до UIViewController). Мой код:UITableView не использует ячейку в качестве отправителя

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "IndividualAchievementsSegue" { 
     let destination = segue.destinationViewController as? IndividualAchievementsViewController 
     let cell = sender as! UITableViewCell 
     let selectedRow = AchievementsTable.indexPathForCell(cell)!.row 
     destination!.viaSegue = achievements[selectedRow] 
     print(selectedRow) 
    } 
} 

но линия let cell = отправитель как! UITableViewCell бросает

Не удалось бросить значение типа «ProgramName.AchievementsViewController» к «UITableViewCell»

Я также попытался

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "IndividualAchievementsSegue" { 
     let destination = segue.destinationViewController as? IndividualAchievementsViewController 
     let selectedRow = AchievementsTable.indexPathForSelectedRow!.row 
     destination!.viaSegue = achievements[selectedRow] 
     print(selectedRow) 
    } 
} 

Это терпит неудачу, потому что он находит ноль разворачивать дополнительный во время achievements[selectedRow], так как это, очевидно, дает мне ноль от let selectedRow = AchievementsTable.indexPathForSelectedRow!.row

ответ

1

Я думаю, что проблема заключается в том, что ваш segue связан с вашим AchievementsViewController по IndividualAchievementsViewController вместо UITableViewCell по IndividualAchievementsViewController. Проверьте в этом раскадровку и исправьте segue с TableCell по номеру IndividualAchievementsViewController.

+0

Я думаю, что вы правы, но странно то, я создал SEGUE, перетаскивая из прототипа ячейки в IndividualAchievementsViewController. Тем не менее, когда я его изучаю, при помощи мыши над точкой соединения сбоку, он выбирает весь контроллер представления. Есть ли какой-то трюк для подключения TableCell к IndividualAchievementsViewController? – Nick

+0

Сначала удалите этот старый segue. После этого в иерархии представлений выберите свой 'TableCell' и нажмите' ctrl' вместе с этим и перетащите его в 'IndividualAchievementsViewController', надейтесь, что вы его поиграете. –

+0

nope, те же ошибки – Nick

0

Итак, решение должно было пройти в DidSelectrowAtIndexPath и удалить DeselectRowAtIndexPath, который был там дважды случайно. Затем используйте следующую

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "IndividualAchievementsSegue" { 
     let destination = segue.destinationViewController as? IndividualAchievementsViewController 
     let selectedRow = AchievementsTable.indexPathForSelectedRow?.row 
     destination!.viaSegue = achievements[selectedRow!] 
     print(selectedRow) 
    } 
} 
Смежные вопросы