如果没有重新加载表,那么使用标识符将数据传递到目标UITableViewCell会返回nil吗?

时间:2015-08-10 11:06:37

标签: ios swift uitableview

任何人都可以解释为什么这会为" destinationCell"

返回nil
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "unwindToCreateTask" {
        let contact = contactList[self.tableView.indexPathForSelectedRow()!.row]

        let destinationVC = segue.destinationViewController as! CreateTaskVC

        if let destinationCell = destinationVC.tableView.dequeueReusableCellWithIdentifier("assignToCell") as? UITableViewCell {
            destinationCell.textLabel?.text = contact.contactName
            destinationCell.detailTextLabel?.text = contact.contactEmail
        }
    }
}

虽然这会返回正确的" destinationCell"

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "unwindToCreateTask" {
        let contact = contactList[self.tableView.indexPathForSelectedRow()!.row]

        let destinationVC = segue.destinationViewController as! CreateTaskVC

        **destinationVC.tableView.reloadData()**

        if let destinationCell = destinationVC.tableView.dequeueReusableCellWithIdentifier("assignToCell") as? UITableViewCell {
            destinationCell.textLabel?.text = contact.contactName
            destinationCell.detailTextLabel?.text = contact.contactEmail
        }
    }
}

如果添加.reloadData()是实现此目的的最佳方法吗?

1 个答案:

答案 0 :(得分:0)

你到底在做什么?

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        ...
        if let destinationCell = destinationVC.tableView.dequeueReusableCellWithIdentifier("assignToCell") as? UITableViewCell {
            destinationCell.textLabel?.text = contact.contactName
            destinationCell.detailTextLabel?.text = contact.contactEmail
        }

在填充dequeueReusableCellWithIdentifier时,cellForRowAtIndexPath函数应UITableView函数中使用。

如果您需要prepareForSegue函数(或任何其他函数)来获取用户点击的单元格中的数据,您应该在didSelectRowAtIndexPath函数中处理此问题。

当调用它时,您将拥有NSIndexPath参数,告诉您已点击的单元格的节和行索引,并且您可以从那里查找数据。

将此“选定项目”记录存储在contact变量中,当调用prepareForSegue函数时,您将获得contact值,随时可以使用!