iOS条件tableview单元格渲染

时间:2018-11-20 04:54:12

标签: ios swift uitableview view uibutton

我目前正在从事基于HRM的快速项目。需要显示带有稍微自定义单元格的表格视图。单元格本身包含两个按钮,在某些业务逻辑下,一个按钮将被隐藏。例如

如果当前用户是雇员本人,则他可以看到一个列表,包含其姓名的单元格可以看到两个按钮,但是其他单元格仅显示一个按钮。 我尝试了以下方法: 1.如果userId == employeeId(employeeId来自模型),则,

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell =  tableView.dequeueReusableCell(withIdentifier: "ClaimTableViewCell", for: indexPath) as! ClaimTableViewCell

        if(self.claimdata[indexPath.section].employeeId  == self.empId) {

            cell.CancelButton.isHidden = false


        }

还,我已经尝试过

if(self.claimdata[indexPath.section].employeeId  != self.empId) {

                cell.CancelButton.frame.size.height = 0


            }

对于第一帧效果很好,当我开始滚动时问题就开始了。对于某些意外的单元格,它还会显示两个按钮。

我想念什么吗?

2 个答案:

答案 0 :(得分:2)

此问题归因于UITableView中的单元可重用性。

在您的 cellForRowAtIndexPath 方法中使用以下代码。

cell.CancelButton.isHidden = true

if(self.claimdata[indexPath.section].employeeId  == self.empId) {
        cell.CancelButton.isHidden = false
 }

答案 1 :(得分:1)

由于tableView单元格是reusableCell

  

带有标识符的dequeueReusableCell

您只需要提供else条件,以便当它再次重用单元格时,它便知道如何使用CancelButton。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell =  tableView.dequeueReusableCell(withIdentifier: "ClaimTableViewCell", for: indexPath) as! ClaimTableViewCell

        if(self.claimdata[indexPath.section].employeeId  == self.empId) {

            cell.CancelButton.isHidden = false

        }else{

            cell.CancelButton.isHidden = true
        }
    }