调整TableView动态内容的行数

时间:2018-05-29 23:29:13

标签: ios swift uitableview

我有一个包含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。但我的问题是如何防止第一个表格单元格中的动态数组出现这样的错误?谢谢!

PS如果我的行数仅为return userModel.count,则顶部单元格与动态内容完全匹配,但其他两个单元格根本不加载(这是有意义的,因为数组内的计数为0)所以索引1和2不显示

enter image description here

1 个答案:

答案 0 :(得分:1)

你可以这样做:

if userModel.count > indexPath.row {
    cell.profileImage.image = userModel[indexPath.row].photo
} else {
    cell.profileImage.image = nil //or whatever default value
}

或者如果userModel是Optional:

if let count = userModel?.count, count > indexPath.row {
    cell.profileImage.image = userModel[indexPath.row].photo
} else {
    cell.profileImage.image = nil //or whatever default value
}