自定义UITableViewCell显示异常:仅呈现空白可选中单元格
问题分析与解决方案
嘿,我立刻发现了导致你的自定义单元格控件不显示的核心问题!
问题根源
你在ControlSettingsView的viewDidLoad里调用了这行代码:
tableView.register(InputCell.self, forCellReuseIdentifier: INPUT_CELL)
这会覆盖你在Storyboard中配置的单元格注册。因为你是通过Storyboard设计的自定义单元格(包含label和textfield,并且关联了InputCell类),系统会自动帮你完成单元格的注册工作。而手动调用register(_:forCellReuseIdentifier:)会让系统创建一个纯代码实例化的InputCell——这个实例没有加载Storyboard里的布局,所有@IBOutlet都是nil,自然看不到任何控件。
修复步骤
- 第一步:删除
viewDidLoad中的tableView.register(InputCell.self, forCellReuseIdentifier: INPUT_CELL)这行代码。 - 第二步:(可选但建议)在
cellForRowAt方法中添加控件内容的赋值逻辑,比如:
这样修复后,不仅控件会显示,还能看到对应的内容。let cell: InputCell = tableView.dequeueReusableCell(withIdentifier: INPUT_CELL, for: indexPath) as! InputCell cell.cell_title.text = "第\(indexPath.row + 1)项设置" cell.cell_input.placeholder = "请输入内容" return cell - 第三步:再次确认Storyboard中的配置:
- 单元格的重用标识符确实是
input_cell(和代码中的常量一致) - 单元格的自定义类设置为
InputCell ControlSettingsView确实关联了Storyboard中的UITableViewController
- 单元格的重用标识符确实是
额外排查点
如果按上面的步骤修复后还是有问题,可以尝试:
- 清理Xcode缓存(
Command+Shift+K),然后重新编译运行 - 检查
InputCell中的@IBOutlet是否正确关联(可以在Storyboard中右键点击控件,查看连线是否指向InputCell的对应属性)
内容的提问来源于stack exchange,提问作者Chip
相关产品推荐
相关产品推荐

