PFTableViewCell 不改变 labelText
Posted
技术标签:
【中文标题】PFTableViewCell 不改变 labelText【英文标题】:PFTableViewCell not changing labelText 【发布时间】:2014-07-02 04:37:08 【问题描述】:下面的代码应该从传递给 cellForRowAtIndexPath 的 PFObject 中获取名称字段,并将 textLabel.text 字段设置为名称(即 tableView 行可能读取“sneeze1”)。我可以使用 heightForRowAtIndexPath 方法更改每行的高度,还可以使用正确的字段查看对 cellForRowAtIndexPath 的正确调用次数(在我的特定情况下,将 3 行加载到 Parse 的数据浏览器上的一个类中),但我可以t 获取要更改的 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
【问题讨论】:
可能你没有重新加载tableview。 您在单元格中实际看到了什么文字? IE。它是第一次工作然后无法更改还是只是空白? 不,我看到的唯一文本是我正在使用的情节提要中指定的默认文本,我将其设置为“默认文本”。它只是在我设置它时没有改变,而且奇怪的是,它显示了正确的行数(在我的测试用例中为 3),并且还允许我更改行的高度。我就是无法设置 textLabel.text 或 subtitle。 【参考方案1】:您必须使用原始委托签名,否则您的方法将不会被调用。而不是
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!, object: PFObject!) -> PFTableViewCell!
使用
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
【讨论】:
我正在使用 Parse.com 的 PFTableViewController,所以在这种情况下方法签名实际上是正确的。 cellForRowAtIndexPath 方法实际上在我的代码中被调用。我可以尝试不使用 Parse.com 的函数来看看会发生什么。【参考方案2】:问题是as?
返回一个可选类型,所以name
是String?
类型。
如果你真的想处理缺失的名字,试试这个:
if let name = object["name"] as? String
cell!.textLabel.text = name
【讨论】:
谢谢,这很好,我将更改代码以处理 null object["name"] 值,但在这种特定情况下,它无济于事。所有 object["name"] 值在到达代码的那部分时实际上已设置。 println 语句每次调用时都有值。【参考方案3】:当我设置使用 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
【讨论】:
以上是关于PFTableViewCell 不改变 labelText的主要内容,如果未能解决你的问题,请参考以下文章
PFTableViewCell imageView 为 Nil(使用情节提要)
解析 iOS SDK:PFTableViewCell 内的 UIButton segue [关闭]
无法将图像从 PARSE 加载到 PFTableViewCell 的 imageView 属性中
如何将图像添加到 PFTableViewCell Swift 2 Xcode 7