【发布时间】:2019-05-09 23:34:10
【问题描述】:
我有一个 UITableViewController,里面有一个原型单元格。该单元格中有一个标签和一个文本字段,并且它的类设置为 InputCell。当表格视图加载时,单元格似乎已出列,但显示为默认的空单元格。
我检查了以下几点:
- TableViewController 的 Class 设置为我的 TableViewController 子类 (ControlSettingsView)
- TableViewController 是 TableView 的委托和数据源
- 自定义单元格的类设置为我的 TableViewCell 子类 (InputCell)
- 自定义单元重用标识符设置为“input_cell”,这与我的 TableViewController 中使用的标识符相匹配。
- 确保标签和文本字段位于我的单元格内容视图中,而不是单元格本身。
- 我的单元格中的视图约束看起来很合理。
- 将单元格背景设置为红色以突出显示标签和文本字段是否不可见,但单元格是否已正确出列。
从根视图控制器导航到我的设置视图的函数
func gototSettingsFor(control: EditableUIElement) {
let v = ControlSettingsView()
self.navigationController?.pushViewController(v, animated: true)
}
ControlSettingsView.swift
class ControlSettingsView: UITableViewController {
let INPUT_CELL: String = "input_cell"
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(InputCell.self, forCellReuseIdentifier: INPUT_CELL)
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch (section) {
case 0:
return 5
default:
return 0
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch (indexPath.section) {
case 0:
let cell: InputCell = tableView.dequeueReusableCell(withIdentifier: INPUT_CELL, for: indexPath) as! InputCell
return cell
default:
return tableView.dequeueReusableCell(withIdentifier: INPUT_CELL, for: indexPath)
}
}
}
InputCell.swift
class InputCell: UITableViewCell {
@IBOutlet weak var cell_input: UITextField!
@IBOutlet weak var cell_title: UILabel!
}
我希望我的 5 个自定义表格视图单元格显示在表格视图中,但是我只得到 5 个空单元格,我可以看到这些单元格在那里,因为如果我点击它们,它们可以被选中。
我无法理解为什么该单元格不是自定义单元格而是一个空单元格。
【问题讨论】:
-
您是否尝试过在 Xcode 中调试视图层次结构,请参阅developer.apple.com/library/archive/documentation/…
-
为标签和文本字段分配默认值。单元格仍然是空的吗?顺便说一句,如果使用相同的 identifier,
cellForRow中的switch毫无意义。当您要将值分配给自定义 IBOutlets 时,代码会在 > 0 部分崩溃。你必须实例化视图控制器。默认初始化程序ControlSettingsView()不会返回情节提要中的控制器。最后,如果单元格是在 Interface Builder 的目标表视图中设计的,则您必须不注册单元格。
标签: ios swift uitableview