在表视图中打开不正确的nib文件和相应的对象

时间:2011-04-19 18:30:35

标签: objective-c xcode uitableview

嘿伙计们, 我正在为我的项目实现一个Table View。首先我填充了我的表,然后我设法成功创建了4个类别,并在每个类别中给出了许多行,但这是我的问题。当该类别中的每个数据打开自己的nib文件时,第一个类别(有7个对象)工作正常。但是在第二类有3个对象的情况下,3个对象实际上是从第一个类别打开nib文件,这不是我想要的。我在我的表中创建并分配了每个对象查看自己的nib文件以打开,但就像我说的那样,来自第二个以及第三个和第四个类别的对象是从第一个类别打开nib文件。这是我的代码如何在表视图中分隔对象:

#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我希望有人可以帮我解决这个问题,谢谢

1 个答案:

答案 0 :(得分:1)

我相信您的问题是您正在尝试将二维数组映射到一维数组上。

在didSelectRowAtIndexPath中:您正在使用indexPath.row,而不检查您所在的indexPath.section。根据该部分,该行为0,而不是表视图中行数的绝对值。所以你最终会得到像

这样的东西

第0节 第0行 第1行

第1节 第0行 第1行

以下是有关NSIndexPath UIKit添加内容的文档:

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/NSIndexPath_UIKitAdditions/Reference/Reference.html#//apple_ref/doc/uid/TP40007175

看起来你的glossaryArray试图通过使用绝对索引来解决这个问题,因此第1节第1行成为glossaryArray的索引3。发生的事情是indexPath.row返回1,而不是预期的3。

您必须将2维indexPath映射到一个维度或将glossaryArray更新为2维。