В настоящее время я работаю над быстрым проектом по управлению человеческими ресурсами. где требуется показать табличное представление со слегка настроенной ячейкой. ячейки, которые содержат две кнопки, при некоторой бизнес-логике одна кнопка будет скрыта. Например ,
если текущий пользователь является самим сотрудником, он может видеть список, в ячейке, содержащей его имя, видны две кнопки, а в другой ячейке будет отображаться только одна кнопка. я пробовал следующее: 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
}
отлично работает для первого кадра, проблема начинается, когда я начинаю прокручивать. для какой-то непредусмотренной ячейки также отображаются две кнопки.
Я что-то упускаю?





Поскольку ячейка tableView может использоваться повторно
dequeueReusableCell withIdentifier
вам просто нужно указать условие 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
}
}
Эта проблема связана с возможностью повторного использования ячеек в UITableView.
Используйте приведенный ниже код в своем методе cellForRowAtIndexPath.
cell.CancelButton.isHidden = true
if (self.claimdata[indexPath.section].employeeId == self.empId) {
cell.CancelButton.isHidden = false
}
Поскольку ячейка tableView является повторно используемойCell dequeueReusableCell withIdentifier, вам просто нужно задать условие else, чтобы при повторном использовании ячейки она знала, что делать с CancelButton.