如何在两个等于彼此的变量上过滤UITableViewCell

时间:2018-03-31 11:57:25

标签: swift uitableview

我想在Swift 4中填充UITableView,我想只显示属于登录用户的记录。显然我需要一个IF语句来查看两个值是否相等。如何返回null,即没有单元格添加到表格中。请参阅以下代码

func tableView(_ tableView: UITableView, 
    cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    guard let cell = tableView.dequeueReusableCell(withIdentifier: 
    "RunCell") as? RunCell else { return UITableViewCell() }

    let user_id_main = String(MainMenuViewController.myVariables.user_id.prefix(2))

    if (user_id_main==runs[indexPath.row].user_id)
    {
        cell.idLbl.text = "ID: " + runs[indexPath.row].run_id
        cell.dateLbl.text = "Date: " + runs[indexPath.row].date_of_run

        return cell
    }
    return cell
}

我知道return cell之外的IF仍会返回一个单元格,直到找到答案为止。

2 个答案:

答案 0 :(得分:2)

这不是UITableViews的工作方式。如果要显示单元格,您无法动态决定。您需要在加载或重新加载表之前执行此操作。

在加载或重新加载tableView之前,将数组过滤到一个新数组,该数组只包含匹配user_id的记录。然后使用这个新数组作为表的模型。新数组的大小将决定表中的行数,每行将对应于新数组中的一个项。

每次user_id_main更改时,请重新过滤您的runs数组并重新加载表格。

答案 1 :(得分:0)

你不能返回nil值单元格,

要实现您想要的效果,首先根据您需要的值过滤runs数组并存储在其他数组中mainUserRuns,然后使用此新数组为您的tableview提供数据。