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? 返回一个可选类型,所以nameString? 类型。

如果你真的想处理缺失的名字,试试这个:

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

怎么让label的文字大小随label宽高改变大小? C# winform

如何改变Label控件的字体颜色