У меня есть три элемента UILabel
, UIImageView
и UIButton
в списке.Я должен показать их соответственно внутри UITableView
.У меня есть такой массив:
tableArray = [["label", "img", "button"],["img","button","label"],["img","label","button"],["button", "img", "label"]]
Позиции элементов такие же, как их позиции (индекс) внутри массива.Мой cellForRowAt
выглядит следующим образом:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "FirstTableViewCell", for: indexPath) as? FirstTableViewCell else {
return UITableViewCell()
}
let tableData = tableArray[indexPath.row]
var count = 0
tableData.forEach { (element) in
switch element {
case "label":
let lbl = self.createLabel()
cell.stackView.insertArrangedSubview(lbl, at: count)
count += 1
break
case "img":
let img = self.createImage()
cell.stackView.insertArrangedSubview(img, at: count)
count += 1
break
case "button":
let btn = self.createButton()
cell.stackView.insertArrangedSubview(btn, at: count)
count += 1
break
default:
break
}
}
return cell
}
Проблема в том, что когда я прокручиваю TableView
каждый раз, когда эти элементы добавляются в ячейки.
Iпопробовал несколько решений для решения этой проблемы, но не повезло.
if tableView.cellForRow(at: indexPath) == nil
, затем добавьте элементы в просмотры стека.
Проверка if cell == nil
после dequeueReusableCell
.Если ноль, то init
ячейка.
let cell = UITableViewCell.init(style: .default, reuseIdentifier: nil) as? FirstTableViewCell
пробовал даже без dequeueReusableCell
.
Но каждый раз происходит то же самое.
Это FirstTableViewCell
class FirstTableViewCell: UITableViewCell {
@IBOutlet weak var stackView: UIStackView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
Любая идея, как проверить, были ли элементы уже добавлены в StackView
, тогда я не буду их добавлять.