IOS表视图中的节数动态

Posted

技术标签:

【中文标题】IOS表视图中的节数动态【英文标题】:IOS Number Of Sections In Table View Dynamic 【发布时间】:2014-08-24 07:32:59 【问题描述】:

我正在创建一个应用程序,用户可以在其中将对象存储在 Core Data 中。我将对象拉到 UITableView 中,并且在那里一切正常。我现在想根据 UISegmentedControl 中的选择将对象分成 1-3 个不同的部分。

目前我有这个来创建 1 部分并用我的对象填充该部分的单元格

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    // Return the number of sections.
    return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    // Return the number of rows in the section.
    return self.fetchedDiscs.count;



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"DiscCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    //Configure Cell
    Disc *currentDisc = [self.fetchedDiscs objectAtIndex:indexPath.row];

    cell.textLabel.text = currentDisc.name;
    cell.detailTextLabel.text = currentDisc.brand;

    return cell;

那么主要的问题是如何动态改变section的个数和section的行数?

Segmented 控件返回诸如选项 1、选项 2、选项 3 之类的值。我能想到的唯一方法是循环遍历我的 fetchedDiscs 数组并将其分成每个部分的数组。然后我可以返回数组的数量(如果它们存在),我可以获取每个数组的计数以获取每个部分中的行数。但后来我遇到了如何让 CellForRowAtIndextPath 与三个数组一起正常工作的问题。

基本上必须有更好更合乎逻辑的方式来做到这一点。我只是不确定如何。

【问题讨论】:

您所描述的几乎就是您将如何做。传递给 cellForRowAtIndexPath:indexPath 包含 section 属性,因此您知道给定单元格使用哪个数组 您可能需要先找到一个不错的教程,因为您似乎缺乏使用UITableView 实例的一些基本知识。对于您的简单问题,任何可能的答案都太复杂了,如果您不理解或无法使用它在您的应用中实现最终解决方案,您可能会投反对票。 【参考方案1】:

假设您有一个名为 dataSource 的字典,其中包含“x”个数组作为键“key1”、“key2”、..“keyX”的值。你可以这样做:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    return [[dataSource allKeys] count];


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    //Get the array object form key. I am considering 'keySection' as an example
    return [[dataSource objectForKey:@"keySection"] count];



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"DiscCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    cell.textLabel.text = [[dataSource objectForKey:keySection] objectAtIndex:indexPath.row]

    return cell;

注意:我在这个编辑器中编写了代码,请原谅任何错误,我只是试图分享这个想法。希望这会有所帮助.. :)

【讨论】:

所以这似乎有很大帮助并且确实有一定的意义,但由于我对 Obj-c 非常了解,我不知道如何正确设置字典。如果在我的 fetchedDisc 数组中我有我的磁盘对象的详细信息并且在 type 属性上我有 option1、option2 或 option3 我如何将数组拆分到由这些键拆分的数组字典中? @CodyJamesTooker> 发布您的数据。

以上是关于IOS表视图中的节数动态的主要内容,如果未能解决你的问题,请参考以下文章

表格视图中的节数不等于我设置的

加载 tableview 时应用程序崩溃并显示错误“无效更新:无效的节数”。

UICollection 崩溃无效更新:无效的部分数。

UITableview 单元格高度在 iOS 14.0 中的滚动表视图上发生变化

将动态单元格的表视图内容高度设置为表视图高度约束 ios

如何从collectionview重新加载部分