我正在尝试使用Swift 3以编程方式在UITableView中设置单元格的正确细节。
但是,我无法致电detailTextLabel.text
进行设置。
目前,我有这个屏幕。如图所示,我需要使用Signed in as:
值以编程方式设置UserDefaults
。
我还设置了单元格的标识符:
这就是我的尝试:
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或类 标识符或连接故事板中的原型单元'
答案 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
}