2014-07-02 43 views
0

下面的代碼應該從PFObject的名稱字段被傳遞到cellForRowAtIndexPath並將textLabel.text字段設置爲名稱(即tableView行可能會讀取「sneeze1」)。我可以使用heightForRowAtIndexPath方法更改每行的高度,並查看正確數量的cellForRowAtIndexPath(在我的具體情況下將3行加載到Parse數據瀏覽器中的一個類中),但是我可以' t讓textLabel.text改變。PFTableViewCell不改變labelText

在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 
} 
+0

可能是你沒有重新加載tableview。 –

+0

你在單元格中看到了什麼文字?即。它第一次工作,然後不能改變或只是空白? – Paulw11

+0

不,我看到的唯一文本是我正在使用的故事板中指定的默認文本,我將其設置爲「默認文本」。它在設置時不會改變,奇怪的是,它顯示了正確的行數(在我的測試用例中爲3),並且還允許我改變行的高度。我只是不能設置textLabel.text或字幕。 – sneeze1

回答

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

問題是as?返回一個可選類型,所以nameString?類型。

試試這個,如果你真的要處理缺少的名字:

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

謝謝,這是一個很好的觀點,我將更改代碼以處理空對象[「名稱」]值,但在這種特定情況下,它將無濟於事。所有的對象[「名稱」]值在它們到達代碼的那一部分時實際設置。 println語句每次調用時都有值。 – sneeze1

1

您必須使用原來的委託簽名,否則你的方法將不會被調用。取而代之的

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

使用

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

我使用的是Parse.com的PFTableViewController,所以方法簽名在這種情況下實際上是正確的。 cellForRowAtIndexPath方法實際上是在我的代碼中調用的。我可以嘗試不使用Parse.com的函數來查看發生了什麼。 – sneeze1