detailTextLabel不会在ios 8 swift中更新

时间:2015-06-28 10:55:31

标签: swift uitableview

我有一个简单的表视图,它使用带有Subtitle样式的UITableViewController。我无法成功更新detailTextView字段。我已经在Stack Overflow上看到ios 8中存在潜在的错误,但没有一个建议的解决方法对我有用。当我打印字段的值时,我得到零。任何帮助,将不胜感激。下面是代码,后面是println语句的结果。我已经看到另一个SO条目列出了ios 8中的一个错误,但没有一个建议的解决方法对我有用。我也在Apple论坛上提出了这个问题

import UIKit

class TableViewController: UITableViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "Test"
    self.navigationItem.rightBarButtonItem = self.editButtonItem()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 3
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as!UITableViewCell
    let xrow = indexPath.row
    let xsection = indexPath.section
    //if (xrow == 0) && (xsection == 0)  {
        // initializing with hard values initially
        cell.textLabel?.text = "initial"
        cell.detailTextLabel?.text = "Initial"
    //}

    println("row = \(xrow), section = \(xsection)")
    println("0: cell.textLabel?.text = \(cell.textLabel?.text)")
    cell.textLabel?.text = "Section = \(xsection)"
    println("1: cell.textLabel?.text = \(cell.textLabel?.text)")
    println("0: cell.detailTextLabel?.text = \(cell.detailTextLabel?.text)")
    cell.detailTextLabel?.text = ("section = \(xsection), row = \(xrow)") as String!
    println("1: cell.detailTextLabel?.text = \(cell.detailTextLabel?.text)")
    return cell
}

}


row = 0, section = 0
0: cell.textLabel?.text = Optional("initial")
1: cell.textLabel?.text = Optional("Section = 0")
0: cell.detailTextLabel?.text = nil
1: cell.detailTextLabel?.text = nil
row = 1, section = 0
0: cell.textLabel?.text = Optional("initial")
1: cell.textLabel?.text = Optional("Section = 0")
0: cell.detailTextLabel?.text = nil
1: cell.detailTextLabel?.text = nil
row = 2, section = 0
0: cell.textLabel?.text = Optional("initial")
1: cell.textLabel?.text = Optional("Section = 0")
0: cell.detailTextLabel?.text = nil
1: cell.detailTextLabel?.text = nil

2 个答案:

答案 0 :(得分:0)

因为detailTextLabel总是返回nil,所以如果单元格样式不支持。

UITableViewCell detailTextLabel reference

所以改变

tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as!UITableViewCell

var cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier") as? UITableViewCell
if cell == nil{
    cell = UITableViewCell(style: .Subtitle, reuseIdentifier: "CellIdentifier")
}

答案 1 :(得分:0)

我很久没有使用默认单元格的detailTextLabel了。该领域的文档说:

  

detailTextLabel:保存单元格的二级(或细节)标签。   UITableViewCell在您创建单元格时添加适当的标签   支持二级标签的样式。如果风格不支持   细节标签,返回nil。请参阅UITableViewCellStyle   当前定义的单元格样式中主标签的描述。

您没有指定单元格样式。我猜测detailTextLabel是零。只记录detailTextLabel进行检查。