У меня есть UICollectionView с 4 представлениями в нем. Каждое из этих представлений имеет внутри UITableView с пользовательскими ячейками. Каждая ячейка UITableView имеет внутри UIButton, и у меня есть 2 ячейки на UITableView.
Что-то странное происходит. У меня есть функция действия для каждой кнопки, чтобы при нажатии кнопки она становилась пурпурной. Странная вещь заключается в следующем: если я прокручиваю до 4-го вида моего собрания и нажимаю на кнопку, он становится фиолетовым, как и ожидалось, но затем, когда я прокручиваю до 1-го вида моего собрания, та же кнопка, которую я нажал вЧетвертый вид (первый или второй) также пурпурный, как если бы четвертый вид моего представления коллекции ссылался на элементы моего первого вида представления коллекции.
Я не знаю, в какой момент1-й вид становится таким же, как 4-й вид, но вот пример кода:
// this is the cellForItemAt of my UICollectionView, very basic
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cellView = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! PollCellView
return cellView
}
// THIS IS ANOTHER FILE HERE
// this is part of my view that populate the UICollectionViews
class PollCellView: UICollectionViewCell {
// the table view
let questAndAnswersTableView : UITableView = {
let tableView = UITableView()
tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.separatorStyle = .none
tableView.allowsSelection = false
return tableView
}()
// I add the tableview in the view here
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(questAndAnswersTableView)
// a classic cellForRowAt of my UITableView
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "AnswerCell2", for: indexPath) as! AnswerCell2
return cell
}
// THIS IS ANOTHER FILE HERE
// this part is my custom cell of the UITableView
class AnswerCell2: UITableViewCell {
let answerTextButton: UIButton = {
let answerButton = UIButton()
answerButton.setTitle("initial text", for: .normal)
return answerButton
}()
// I add the button to the cell here
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String!) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
addSubview(answerTextButton)
// I define the action function
answerTextButton.addTarget(self, action: #selector(answerClicked), for: .touchUpInside)
}
// the action to make the button purple
@objc func answerClicked(sender: UIButton) {
sender.backgroundColor = UIColor(displayP3Red: 0.6902, green: 0.7176, blue: 0.9922, alpha: 1.0)
}
[РЕДАКТИРОВАТЬ ПОСЛЕ ПОЛУЧЕНИЯ ОТВЕТОВ]
Снятие с очереди определенно не так просто, как сначалаКажется ... Вы не можете доверять тому, что табличное представление, удаленное в данном представлении коллекции, действительно то, что вы ожидаете ... Вам нужно самим отслеживать содержимое (модель). Единственное, что упростило исправление, - это использование замыканий между ячейкой TableView и ячейкой UICollectionViewCell ... Вы можете очень легко передавать данные из одной в другую (например, по нажатию indexPath и т. Д.).