将数据从表视图单元格传递到新视图控制器错误

时间:2017-10-30 06:35:19

标签: ios swift uitableview

我试图从我的tableViewCell传递数据,但是,在我的let cell = sender as! UITableViewCell

上继续收到错误
  

致命错误:在打开Optional时意外发现nil   值。

如何让我的手机成为可选手机?我试图从数组中传递数据。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? UsersProfileViewController{


        let cell = sender as! UITableViewCell
        let selectedRow = partnerTable.indexPath(for: cell)?.row

        if let name = usersArray[selectedRow!].firstLastName{
            destination.name = name

        }  
    }




   override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    performSegue(withIdentifier: "toUser", sender: nil)

}
}

4 个答案:

答案 0 :(得分:0)

我发布了一件事,你想获得当前选择的tableview数据并希望将它传递给下一个视图控制器,你可以用一种简单的方式做到这一点。检查tableview单元格选择的委托方法

didSelectRowAtIndexPath

从这个委托方法中你可以保存选中的行索引并在准备segue方法中这样调用这个函数,你可以在didSelectRowAtIndexPath委托方法中设置selectedRow值。

usersArray[selectedRow!].firstLastName

答案 1 :(得分:0)

你应该这样触发

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.performSegue(withIdentifier: "toUser", sender: indexPath.row)
}

并准备segue

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    let selectedRow = sender as? Int
    if let name = usersArray[selectedRow!].firstLastName{
        destination.name = name
    }
}

答案 2 :(得分:0)

如果您更喜欢使用故事板使用segue:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let indexPath = tableView.indexPathForSelectedRow {
        guard let destinationVC = segue.destination as? UsersProfileViewController else {return}
        let selectedRow = indexPath.row
        destinationVC.name = usersArray[selectedRow].firstLastName
    }
}

您还可以以编程方式转到目标ViewController,并将所需的值传递给该控制器。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath:  IndexPath) {
  let sb = UIStoryboard.init(name: "StoryboardName", bundle:     nil)
  let destinationVC = sb.instantiateViewController(
            withIdentifier: "StoryboardId for viewcontroller set in storyboard") as?                                         UsersProfileViewController
   guard let name = usersArray[selectedRow!].firstLastName { else return }
   destinationVC.name = name
   self.presentViewController(destinationVC, animated: true, completion: nil)

}

<强>步骤:

  1. 获取故事板的实例。
  2. 借助故事板中分配的故事板ID实例化所需的viewcontroller。
  3. 将所需数据传递到目标VC。
  4. 显示目标视图控制器。

答案 3 :(得分:0)

要做的步骤:

  1. 首先在View控制器中创建selectedIndex属性。

  2. 使用indexPath从didSelectRowAtIndexPath表视图的委托方法设置selectedIndex属性值。

  3. 在准备Segue方法中,您可以在选择索引时从数据源对象中找到数据值。

  4. 4.从数据源中为选定索引传递值,并将selectedIndex属性设为nil。