多节 UITableView 和 NSArray

Posted

技术标签:

【中文标题】多节 UITableView 和 NSArray【英文标题】:multi section UITableView and NSArray 【发布时间】:2013-01-22 17:51:49 【问题描述】:

我有一个包含 5 个对象的 NSArray。

NSArray *tmpArry2 = [[NSArray alloc] initWithObjects:@"test1", @"test2", @"test3", @"test4", @"test5",nil];

我有一个有 4 个部分的表格(见屏幕截图)

我想做的是展示

第一节中的test1 第二部分中的 test2 和 test3 第 3 节中的 test4 第 4 节中的 test5

这里的问题是我有 index.row 和 index.section 为他们每个人去

indexPath.row: 0 ... indexPath.section: 0
indexPath.row: 0 ... indexPath.section: 1
indexPath.row: 1 ... indexPath.section: 1
indexPath.row: 0 ... indexPath.section: 2
indexPath.row: 0 ... indexPath.section: 3

我希望使用 indexPath.section 来获得 tmpArry2 中的值,但我不确定如何做到这一点。我想过创建一个全局静态 int counter = 0;并在 cellForRowAtIndexPath 中不断增加它,但问题是,如果我向上和向下滚动,值会在单元格之间不断跳跃。

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


    //NSLog(@"Inside cellForRowAtIndexPath");

    static NSString *CellIdentifier = @"Cell";

    // Try to retrieve from the table view a now-unused cell with the given identifier.
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // If no cell is available, create a new one using the given identifier.
    if (cell == nil)
    
        // Use the default cell style.
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    

    NSLog(@"indexPath.row: %d ... indexPath.section: %d ...", indexPath.row, indexPath.section);

//this will not give me right results
//NSString *titleStr2 = [tmpArry2 objectAtIndex:indexPath.section];



【问题讨论】:

【参考方案1】:

以下代码应该会有所帮助,但我不明白为什么在 tmpArry2 和 cellForRowAtIndexPath 方法 countDownArray 中有标题?我假设你在代码中的某个地方重命名它。

如果您将以下代码放在 cellForRowAtIndexPath 方法中,它应该可以工作。

NSInteger index = 0;
for (int i = 0; i < indexPath.section; i++) 
    index += [self tableView:self.tableView numberOfRowsInSection:i];

index += indexPath.row;
cell.textLabel.text = [countDownArray objectAtIndex:index];

【讨论】:

对不起 - 我有一个错字。当我在这里发布问题时,我通常会忽略我的问题。我错过了一些变量 感谢您的出色简单回答!像魅力一样工作【参考方案2】:

我认为您需要将 tmpArry2 的结构更改为具有子数组——这是执行部分的一种常用方法。所以数组应该是这样的(使用新的数组表示法):

NSArray *tmpArry2 = @[@[@"test1"], @[@"test2", @"test3"], @[@"test4"], @[@"test5"]];

这为您提供了一个包含 4 个对象的数组,每个对象都是一个数组。然后在你的数据源方法中你会这样做:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    return tmpArry2.count;


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

    return [tmpArry2[section] count];


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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    cell.textLabel.text = tmpArry2[indexPath.section][indexPath.row];
    return cell;

【讨论】:

以上是关于多节 UITableView 和 NSArray的主要内容,如果未能解决你的问题,请参考以下文章

在多节 UITableView 中添加行时崩溃

从多节 UITableView 中的自定义静态单元格中检索标签文本

使用情节提要的多节 UITableView

具有自定义单元格和多节数组数据的 Swift UITableView

使用核心数据计算多节表的总和

UITableView 部分标题与 UITableviewCell 重叠并且没有背景颜色