调整 TableView 动态内容的行数
Posted
技术标签:
【中文标题】调整 TableView 动态内容的行数【英文标题】:Adjust row count for TableView dynamic content 【发布时间】:2018-05-29 23:29:13 【问题描述】:我有一个包含 3 个 TableCells 的页面(底部的图片):第一个单元格填充了来自 Firebase 的动态加载内容,用于填充我的 userModel
数组中的个人资料图片、用户名和观看分钟数。我在为表格设置numberOfRowsInSection
时遇到问题,因为第一个单元格是动态的。
当我尝试计算单元格的数量时,我加了 2,因为我知道我需要显示两个静态单元格(商品单元格和注销单元格)。但由于userModel.count
从 0 开始,应用程序会由于在填充 userModel.count 数组之前对动态内容进行行索引而崩溃:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return userModel.count + 2
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
if indexPath.row == 0
let cell = tableView.dequeueReusableCell(withIdentifier: "leaderboardCell", for: indexPath) as! LeaderboardCell
cell.profileImage.image = userModel[indexPath.row].photo
cell.profileImage.layer.cornerRadius = cell.profileImage.frame.size.width/2
cell.userName.text = userModel[indexPath.row].username
cell.watchTime.text = userModel[indexPath.row].watchTime
cell.profileLeaderboardContainer.layer.cornerRadius = 3.0
return cell
else if indexPath.row == 1
let cell = tableView.dequeueReusableCell(withIdentifier: "merchCell", for: indexPath) as! MerchCell
return cell
else
let cell = tableView.dequeueReusableCell(withIdentifier: "logoutCell", for: indexPath) as! LogoutCell
cell.logoutButton.layer.cornerRadius = 3.0
return cell
应用在以下位置崩溃:
cell.profileImage.image = userModel[indexPath.row].photo
这完全有道理,因为在将任何数据加载到该模型之前,没有 2 的索引位置。但我的问题是如何防止第一个表格单元格中的动态数组出现这种错误?谢谢!
P.S 如果我的行数只是 return userModel.count
顶部单元格加载动态内容时完全正常,但其他两个单元格根本不加载(这是有道理的,因为数组内的计数为 0)所以索引1和2不显示
【问题讨论】:
【参考方案1】:你可以这样做:
if userModel.count > indexPath.row
cell.profileImage.image = userModel[indexPath.row].photo
else
cell.profileImage.image = nil //or whatever default value
或者如果 userModel 是可选的:
if let count = userModel?.count, count > indexPath.row
cell.profileImage.image = userModel[indexPath.row].photo
else
cell.profileImage.image = nil //or whatever default value
【讨论】:
以上是关于调整 TableView 动态内容的行数的主要内容,如果未能解决你的问题,请参考以下文章
ORA-00903,ORA-06512,同时计算所有用户表的行数(动态 sql)