我目前正在从事基于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
}
对于第一帧效果很好,当我开始滚动时问题就开始了。对于某些意外的单元格,它还会显示两个按钮。
我想念什么吗?
答案 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
}
}