多节 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 中的自定义静态单元格中检索标签文本