如何在静态UITableView中设置detailTextLabel.text?

时间:2017-02-25 03:48:05

标签: swift uitableview

我正在尝试使用Swift 3以编程方式在UITableView中设置单元格的正确细节。

但是,我无法致电detailTextLabel.text进行设置。

目前,我有这个屏幕。如图所示,我需要使用Signed in as:值以编程方式设置UserDefaults

Image 1

我还设置了单元格的标识符:

Image 2

这就是我的尝试:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "user_Cell", for: indexPath)

    let prefs:UserDefaults = UserDefaults.standard
    let user = prefs.value(forKey: "USER") as? String

    cell.detailTextLabel?.text = user

    return cell
}

但是,它会返回错误:

  

***断言失败 - [UITableView dequeueReusableCellWithIdentifier:forIndexPath:],
  /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.6.21/UITableView.m:6600
  ***由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'无法将单元格出列   标识符user_Cell - 必须注册一个nib或类   标识符或连接故事板中的原型单元'

1 个答案:

答案 0 :(得分:2)

这是一张静态表。对于静态表,修改单元格的工作方式不同。您必须实施cellForRowAt:并致电super并返回结果cell。如果这是您要修改的一个特殊单元格,请对其进行修改(使用indexPath作为测试)。像这样:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = super.tableView(tableView, cellForRowAt: indexPath)
    if indexPath == IndexPath(row: 0, section: 0) { // double-check this
        let prefs = UserDefaults.standard
        if let user = prefs.value(forKey: "USER") as? String {
            cell.detailTextLabel?.text = user
        }
    }
    return cell
}