PFTableViewCell不更改labelText

时间:2014-07-02 04:37:08

标签: ios parse-platform swift ios8

下面的代码应该将PFObject中的name字段传递给cellForRowAtIndexPath,并将textLabel.text字段设置为名称(即tableView行可能会读取" sneeze1")。我可以使用heightForRowAtIndexPath方法更改每一行的高度,并且还可以看到正确的cellForRowAtIndexPath调用次数(在我的特定情况下,在Parse的数据浏览器中加载了3行)字段,但我无法更改textLabel.text。

在textLabel更改文本之前是否需要完成其他一些步骤?

override func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
    return 60
}

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!, object: PFObject!) -> PFTableViewCell! {
    var cellIdentifier = "EventCell"

    var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as? PFTableViewCell

    if !cell {
        cell = PFTableViewCell(style: .Subtitle, reuseIdentifier: cellIdentifier)
    }

    var name = object["name"] as? String
    cell!.textLabel.text = name
    println("textLabel: \(cell!.textLabel.text)" + "  name: \(name)")

    return cell
}

3 个答案:

答案 0 :(得分:1)

您必须使用原始代理签名,否则您的方法无法被调用。而不是

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!, object: PFObject!) -> PFTableViewCell!

使用

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!

答案 1 :(得分:0)

问题是as?会返回一个可选类型,因此name的类型为String?

如果你真的想要处理缺少的名字,请尝试这样做:

if let name = object["name"] as? String {
    cell!.textLabel.text = name
}

答案 2 :(得分:0)

当我设置使用UITableViewCell cellForRowAtIndexPath时,我能够更改文本。看起来问题在于Parse的PFTableViewCell可能与Swift混合。它不允许我更改PFTableViewCell上的文本。

作为旁注,即使我的PFQueryTableViewController与上面的PFTableViewCell cellForRowAtIndexPath并排存在以下方法,代码也能正常工作。不知何故,代码实际上只是运行UITableViewCell cellForRowAtIndexPath方法。

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    var cellIdentifier = "EventCell"

    var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as? UITableViewCell

    if !cell {
        cell = UITableViewCell(style: .Subtitle, reuseIdentifier: cellIdentifier)
    }

    var name = "HELLO"//object["name"] as? String
    cell!.textLabel.text = name
    println("textLabel: \(cell!.textLabel.text)" + "  name: \(name)")
    //cell.imageView.file = object.objectForKey(self.imageKey) as PFFile

    return cell
}