#pragma mark -
#pragma mark Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 4;
}
// Category
- (NSString *)tableView:(UITableView *)tableView
titleForHeaderInSection:(NSInteger)section
{
if (section == 0) return @"Category 1";
if (section == 1) return @"Category 2";
if (section == 2) return @"Category 3";
if (section == 3) return @"Category 4";
return @"Other";
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
if (section == 0) return 7;
if (section == 1) return 3;
if (section == 2) return 6;
if (section == 3) return 5;
return 0;
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
NSUInteger row = [indexPath row];
if ( indexPath.section == 1 ) row += 7;
if ( indexPath.section == 2 ) row += 10;
if ( indexPath.section == 3 ) row += 16;
if ( indexPath.section == 4 ) row += 21;
cell.textLabel.text = [glossaryArray objectAtIndex:row];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
并打开每个单元格:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if ([[glossaryArray objectAtIndex:indexPath.row] isEqual:@"First View Controller"]) {
FirstViewController *firstVC = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[self.navigationController firstVC animated:YES];
[firstVC release];
}
else if ([[glossaryArray objectAtIndex:indexPath.row] isEqual:@"Second View Controller"]) {
SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self.navigationController pushViewController:secondViewController animated:YES];
[secondViewController release];
}
else if (...
这就是我的nib文件打开每个视图的方式,但同样的问题是,他们没有打开自己的视图,他们正在打开第一个类别的nib文件,这是不正确的nib文件。 Sop我希望有人可以帮我解决这个问题,谢谢
答案 0 :(得分:1)
我相信您的问题是您正在尝试将二维数组映射到一维数组上。
在didSelectRowAtIndexPath中:您正在使用indexPath.row,而不检查您所在的indexPath.section。根据该部分,该行为0,而不是表视图中行数的绝对值。所以你最终会得到像
这样的东西第0节 第0行 第1行
第1节 第0行 第1行
以下是有关NSIndexPath UIKit添加内容的文档:
看起来你的glossaryArray试图通过使用绝对索引来解决这个问题,因此第1节第1行成为glossaryArray的索引3。发生的事情是indexPath.row返回1,而不是预期的3。
您必须将2维indexPath映射到一个维度或将glossaryArray更新为2维。