Ios UICollectionViewCell中的UITableView的正确MVC设计是什么?

Ios UICollectionViewCell中的UITableView的正确MVC设计是什么?,ios,objective-c,model-view-controller,Ios,Objective C,Model View Controller,正如标题所描述的,我的每个集合视图单元格中都有一个tableview。对我来说,superview的控制器应该控制视图是有道理的,但由于在本例中,每个tableview包含不同的数据,因此我将每个superview(集合视图单元格)作为其tableview的控制器。我希望这是有道理的。我知道让视图也成为控制器违反了MVC范式,但我不确定在这种情况下实现MVC合规性的正确方法是什么。我还需要根据CollectionViewController中发生的情况向表视图发送消息。我是否需要将UITable

正如标题所描述的,我的每个集合视图单元格中都有一个tableview。对我来说,superview的控制器应该控制视图是有道理的,但由于在本例中,每个tableview包含不同的数据,因此我将每个superview(集合视图单元格)作为其tableview的控制器。我希望这是有道理的。我知道让视图也成为控制器违反了MVC范式,但我不确定在这种情况下实现MVC合规性的正确方法是什么。我还需要根据CollectionViewController中发生的情况向表视图发送消息。我是否需要将UITableViewController子类化并在collectionviewcell.h文件中引用它


对不起,这让人困惑。感谢您的帮助。

我认为您的直觉是正确的,将视图对象用作数据源违反了MVC。我建议使用拥有的视图控制器作为所有表视图的数据源,或者为每个表视图设置一个单独的模型对象,为该表视图提供单元格

如果使用单个数据源,则必须有一个switch语句来确定哪个表视图发出请求,并用适当的数据填充单元格

我的直觉是创建一个精简的表视图数据源类,该类的唯一工作是在收集单元内为表视图提供单元(并响应其他收集视图数据源协议方法)。使用UICollectionViewCell的自定义子类,该子类具有指向数据源对象的强属性。您可以让您的自定义单元类在初始化时创建一个空的数据源对象,并将其出口连接到表视图

然后在cellForItemAtIndexPath方法中,将适当的数据传递给单元格的数据源对象。如果您重用一个单元格,它将已经有一个数据源对象,因此您只需将数据替换为新数据并触发重载数据方法

控制器对象将在模型和视图之间进行调解,就像它应该做的那样。它将为每个单元格设置模型数据,然后每个单元格的数据源对象将充当该单元格表视图的模型


如果您以后使用几种不同类型的收集单元来显示不同的数据,那么为每个单元使用单独的数据源对象将使代码保持简单。您只需根据单元格类型对数据源对象进行子类化。

能否处理
cellForItemAtIndexPath
中的tableview逻辑?由于包含tableview的集合视图单元格的数量会根据用户交互的不同而有所不同,我知道switch语句是不可取的。但我喜欢您后来给出的关于使用自定义集合视图单元格为其表视图设置数据源的解决方案,仅此而已。但是我对我的CustomCollectionViewCell.h和.m文件很好奇:这些文件是否被视为控制器,并且视图位于实际的nib中?或者这些文件被认为只是“视图”的一部分——如果你想在nib中查看的话,就是“代码隐藏”?不,你的CustomCollectionViewCell定义了UIView的一个自定义子类。.m文件是该类背后的代码。.xib文件定义该视图类内视图的结构。.h、.m和.xib文件都组合在一起以创建视图对象。(在本例中为集合视图子类。)