Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用相同引用的UICollectionView中的两个UITableView?_Ios_Swift_Uitableview_Uicollectionview - Fatal编程技术网

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

Ios 使用相同引用的UICollectionView中的两个UITableView?,ios,swift,uitableview,uicollectionview,Ios,Swift,Uitableview,Uicollectionview,我有一个UICollectionView,其中有4个视图。每个视图中都有一个UITableView,其中包含自定义单元格。UITableView的每个单元格内都有一个UIButton,每个UITableView有2个单元格 奇怪的事情正在发生。我对每个按钮都有一个动作功能,这样当点击按钮时,它就会变成紫色。奇怪的是:如果我滚动到收藏视图的第四个视图并单击一个按钮,它会像预期的那样变为紫色,但当我滚动到收藏视图的第一个视图时,我在第四个视图(第一个或第二个视图)中单击的按钮会变为紫色也是紫色的,就

我有一个UICollectionView,其中有4个视图。每个视图中都有一个UITableView,其中包含自定义单元格。UITableView的每个单元格内都有一个UIButton,每个UITableView有2个单元格

奇怪的事情正在发生。我对每个按钮都有一个动作功能,这样当点击按钮时,它就会变成紫色。奇怪的是:如果我滚动到收藏视图的第四个视图并单击一个按钮,它会像预期的那样变为紫色,但当我滚动到收藏视图的第一个视图时,我在第四个视图(第一个或第二个视图)中单击的按钮会变为紫色也是紫色的,就好像我的收藏视图的第四个视图引用了收藏视图的第一个视图中的项目一样

我不知道第1个视图在哪一点与第4个视图相同,但下面是代码示例:

//这是我的UICollectionView的cellForItemAt,非常基本
重写func collectionView(collectionView:UICollectionView,cellForItemAt indexPath:indexPath)->UICollectionViewCell{
让cellView=collectionView.DequeueReuseAbleCell(带reuseIdentifier:reuseIdentifier,for:indexPath)作为!PollCellView
返回cellView
}
//这是另一个文件
//这是我的视图的一部分,用于填充UICollectionView
类PollCellView:UICollectionViewCell{
//表视图
让questAndAnswersTableView:UITableView={
让tableView=UITableView()
tableView.translatesAutoresizingMaskIntoConstraints=false
tableView.separatorStyle=.none
tableView.AllowSelection=false
返回表视图
}()
//我在这里的视图中添加tableview
重写初始化(帧:CGRect){
super.init(frame:frame)
添加子视图(questAndAnswersTableView)
//我的UITableView中的一个经典cellForRowAt
func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
让cell=tableView.dequeueReusableCell(标识符为:“AnswerCell2”,用于:indexPath)作为!AnswerCell2
返回单元
}
//这是另一个文件
//这部分是UITableView的自定义单元格
类应答器单元2:UITableViewCell{
让answerTextButton:UIButton={
让answerButton=UIButton()
answerButton.setTitle(“初始文本”,用于:。正常)
返回应答按钮
}()
//我将按钮添加到单元格中
重写init(样式:UITableViewCell.CellStyle,reuseIdentifier:String!){
init(样式:style,reuseIdentifier:reuseIdentifier)
添加子视图(应答文本按钮)
//我定义了动作函数
answerTextButton.addTarget(self,action:#选择器(answerClicked),for:.touchUpInside)
}
//使按钮变为紫色的操作
@objc func应答已单击(发送方:UIButton){
sender.backgroundColor=UIColor(显示P3红色:0.6902,绿色:0.7176,蓝色:0.9922,alpha:1.0)
}
[根据收到的答案进行编辑]


退出队列肯定不像最初看起来的那么简单……您不能相信在给定集合视图中退出队列的tableview就是您所期望的那样……您需要跟踪内容(模型)您自己。一件容易修复的事情是在TableView的单元格和UICollectionViewCell的单元格之间使用闭包……您可以很容易地将数据从一个传递到另一个单元格(例如单击Indexath等).

当您管理多个嵌套的TableView或CollectionView时,甚至当您自己管理它时,您必须设置一个数组系统,当单击按钮时,您可以将这些IndExpath添加到一个名为“IndExpathThatArepuple”的数组中然后,每次单击按钮后,在button click函数内部,传递indexPath并将其添加到数组中。如果按下button click函数时按钮已在数组中,则删除该indexPath。在button click函数中,添加或删除indexPath后,重新加载集合视图,该集合视图将重新加载表视图,然后在“cellForItemAtIndexPath”中检查IndexPathThatArepuple数组,然后写入“如果indexpath包含在IndexPathThatArepuple中”,然后将单元格颜色设置为紫色


我理解你想做什么,但你没有意识到或理解iOS中的单元重用系统有多么复杂。你需要做的第一件事就是把你的思想围绕在这样一个想法上:由于单元重用,你必须手动管理单元状态。另一张表中显示的紫色单元来自单元重用。苹果不会自动控制如果你想为你管理这个,你必须自己去做。正如我上面所描述的,甚至我上面的描述都不是那么简单,因为你可能要花上几个星期才能掌握这个概念。祝你好运,你最终会得到它。

当你管理多个嵌套的TableView或CollectionView时,或者当你管理多个嵌套的TableView或CollectionView时他自己,你必须建立一个数组系统,当点击按钮时,你将这些IndExpath添加到一个名为“IndExpathThatArepuple”的数组中然后,每次单击按钮后,在button click函数内部,传递indexPath并将其添加到数组中。如果按下button click函数时按钮已在数组中,则删除该indexPath。在button click函数中,添加或删除indexPath后,重新加载集合视图,该集合视图将重新加载表视图,然后在“cellForItemAtIndexPath”中检查IndexPathThatArepuple数组,然后写入“如果indexpath包含在IndexPathThatArepuple中”,然后将单元格颜色设置为紫色

我知道你想做什么,但你没有意识到或理解iOS中的单元重用系统有多么复杂。你需要做的第一件事就是把你的思想集中在这样一个想法上:由于单元重新使用,你必须手动管理单元状态。紫色单元显示在