UITableView不使用单元格作为发件人

时间:2016-08-25 05:24:30

标签: ios uitableview

enter image description here我正在尝试segue并传递数据(从UITableView到UIViewController)。我的代码是

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)
    }
}

但该行让cell = sender为! 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]期间发现nil解包可选项,因为这显然给了let selectedRow = AchievementsTable.indexPathForSelectedRow!.row

的nil

2 个答案:

答案 0 :(得分:1)

我认为问题在于您的segue与AchievementsViewControllerIndividualAchievementsViewController而不是UITableViewCellIndividualAchievementsViewController相关联。检查故事板,并使用TableCellIndividualAchievementsViewController更正segue。

答案 1 :(得分: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)
    }
}