gpt4 book ai didi

ios - UICollectionView 中的两个 UITableView 使用相同的引用?

转载 作者:行者123 更新时间:2023-11-28 07:19:36 26 4
gpt4 key购买 nike

我有一个包含 4 个 View 的 UICollectionView。这些 View 中的每一个都有一个带有自定义单元格的 UITableView。 UITableView 的每个单元格内部都有一个 UIButton,每个 UITableView 有 2 个单元格。

奇怪的事情发生了。我为每个按钮设置了一个 Action 函数,这样当一个按钮被点击时,它就会变成紫色。奇怪的是:如果我滚动到我的收藏 View 的第 4 个 View 并单击一个按钮,它会按预期变为紫色但是当我滚动到我的收藏 View 的第一个 View 时,我在第 4 个 View (第一个或第二个)也是紫色的,就好像我的收藏 View 的第 4 个 View 引用了我的第一个收藏 View 的项目。

我不知道第一个 View 在哪一点与第四个 View 相同,但这里是代码示例:

// 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)
}

[根据收到的答案进行编辑]

出列绝对不像乍看起来那么简单...您不能相信在给定 Collection View 中出列的 TableView 真的是您期望的...您需要跟踪内容(模型)你自己。使它更容易修复的一件事是在 TableView 的单元格和 UICollectionViewCell 的单元格之间使用闭包...您可以非常轻松地将数据从一个传递到另一个(例如单击了什么 indexPath 等)。

最佳答案

当您管理多个嵌套的 TableView 或 Collection View 时,甚至当您自己管理时,您必须设置一个数组系统,当单击按钮时,您将这些索引路径添加到一个名为“indexPathsThatArePuple”的数组中然后当你点击每个按钮后,在按钮点击函数中,你传递 indexPath 并将其添加到数组中。如果按下按钮单击功能时按钮已经在数组内,则删除该 indexPath。在按钮单击功能中,添加或删除 indexPaths 后,重新加载将重新加载 tableviews 的 Collection View ,然后在“cellForItemAtIndexPath”中检查 indexPathsThatArePuple 数组,然后写入“如果 indexpath 包含在 indexPathsThatArePuple 中”,然后设置单元格颜色到紫色。

我明白你想做什么,但你没有意识到或理解 iOS 中的单元重用系统有多么复杂。您需要做的第一件事就是将您的想法围绕在您必须手动管理由于单元格重用而导致的单元格状态的想法上。另一个表中显示的紫色单元格来自单元格重用。 Apple 不会自动为您管理,您必须自己做。正如我上面所描述的,甚至我上面的描述都不是那么简单,因为你可能会为此苦苦挣扎数周,直到你掌握了这个概念。祝你好运,你最终会得到它。

关于ios - UICollectionView 中的两个 UITableView 使用相同的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58541447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com