TableViewCell无法显示数据问题排查求助
解决TableViewCell完全不显示内容的问题
看起来你遇到的核心问题有几个,我帮你逐一排查并给出解决方案:
1. 最致命的错误:分区数量返回0
你的numberOfSections(in:)方法返回了0,这就意味着TableView没有任何分区——没有分区的话,不管你设置多少行,TableView都不会渲染任何单元格!
把这个方法的返回值改成1即可:
func numberOfSections(in tableView: UITableView) -> Int { // 返回1个分区(大多数场景下都只需要一个分区) return 1 }
2. 数据加载后没有刷新TableView
你在fetchJSON方法里成功解析完JSON数据后,没有通知TableView刷新数据。即使数据已经加载到courses数组里,TableView也不会自动更新显示。
修改解析成功后的代码,添加刷新方法:
do { let decoder = JSONDecoder() self.courses = try decoder.decode([Courses].self, from: data) print(self.courses) // 关键:获取数据后刷新表格 self.arg.reloadData() } catch let jsonErr { print("Failed to decode JSON", jsonErr) }
3. 确认TableView的代理和数据源已正确关联
虽然你的ViewController已经遵守了UITableViewDelegate和UITableViewDataSource协议,但要确保TableView确实把这两个职责交给了它:
- 要么在Storyboard中,右键点击TableView,把
delegate和dataSource拖拽关联到ViewController上; - 要么在
viewDidLoad里手动设置:override func viewDidLoad() { super.viewDidLoad() // 手动设置代理和数据源 arg.delegate = self arg.dataSource = self fetchJSON() // ...其他原有代码 }
4. 自定义Cell的潜在问题
你把cell强转为TableViewCell(自定义单元格类),这里需要注意:
- 确认Storyboard中的Cell的
Class属性已经设置为TableViewCell(在Identity Inspector里检查); - 如果你的自定义Cell里有自己添加的UILabel控件,那你应该设置自定义Label的文本,而不是系统默认的
textLabel——比如如果你的Cell里有一个名为courseTitleLabel的Label,就应该写cell.courseTitleLabel?.text = "sdafasdfs",而不是用cell.textLabel?.text。
5. 背景色不生效的问题
你当前设置的selectedBackgroundView是单元格被选中时的背景色,如果要设置正常状态下的背景色,需要直接设置:
cell.backgroundColor = UIColor.black
按照上面的步骤修改后,你的TableView应该就能正常显示内容了!
内容的提问来源于stack exchange,提问作者Connor Woodford
相关产品推荐
相关产品推荐

