在swift中选择时,Tableview单元格返回nil

时间:2015-04-15 20:17:56

标签: ios uitableview swift

此代码从json文件中读取并返回所有单元格中的“name”值,这样可以正常工作,但是当我选择它继续返回nill的值时,我想得到该值。我在其他问题中尝试了其他一些解决方案,因为它们在Objective C中,这很快,我试过但根本没用。我想要的只是细胞内的价值。 另外,我想传递“id”的值,即所选单元格的数据[“id”],这是可能的。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("ImageCell", forIndexPath: indexPath) as UITableViewCell //1

    let data = datas[indexPath.row]

    if let captionLabel = cell.viewWithTag(100) as? UILabel {
        if let caption = data["name"].string{
            captionLabel.text = caption
        }
    }

    return cell
}

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

    let indexPath = self.tableView.indexPathForSelectedRow();

    let currentCell = self.tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!;

    println(currentCell.textLabel!.text)
    self.viewofloc.hidden = true
}

2 个答案:

答案 0 :(得分:2)

方法tableView:didSelectRowAtIndexPath:为所选单元格提供索引路径。无需使用self.tableView.indexPathForSelectedRow重新计算它。

尝试使用以下内容编辑tableView:didSelectRowAtIndexPath:

 override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        let currentCell = self.tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell!;
    }

我曾尝试使用新的Xcode项目(Master-Detail Application)并获得了一个单元格。

答案 1 :(得分:1)

删除标签,只需创建一个简单的UITableViewCell子类,然后直接访问UILabel。您将看到使用标签扩展您的单元格会变得很麻烦。

此外,您的indexPath已在didSelectRowAtIndexPath中提供,因此请使用提供的tableViewindexPath抓取您的单元格。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("ImageCell", forIndexPath: indexPath) as? ImageCell

    let data = datas[indexPath.row]

    if let caption = data["name"] as? String {
        cell.labelCaption.text = caption
    }

    return cell!
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let currentCell = tableView.cellForRowAtIndexPath(indexPath) as! ImageCell;

    println(currentCell.textLabel!.text)
    self.viewofloc.hidden = true
}

class ImageCell: UITableViewCell {
    @IBOutlet weak var labelCaption: UILabel!
}