-1

いくつかのセクションを持つグループ化された uitableview があります。セクションは正常に表示され、行数は正しいですが、リスト項目の配置に問題があります。名前のリストを持つ NSMutableArray があり、subArrayWithRange を使用してこの配列を分割します。詳細については、コードを参照してください。問題は、リスト項目が正しいセクションの下に表示されないことです。解決策が見つからないようです。

cellForRowAtIndexPath:

NSInteger section = [indexPath section];
    NSString *sectionName = [sectionNamesArray objectAtIndex:section];
    NSCountedSet *set = [[NSCountedSet alloc] initWithArray:townArray];
    int numOfRows = [set countForObject:[NSString stringWithFormat:@"%@",sectionName]];
    int initNumRows = [set countForObject:[NSString stringWithFormat:@"%@",[sectionNamesArray objectAtIndex:0]]];

if(section == 0) {

    NSRange range = NSMakeRange(0,numOfRows);

    NSArray *subArray = [[namesArray subarrayWithRange:range] retain];
        NSArray *subTownArray = [[townArray subarrayWithRange:range]retain];
        //indexTracker = indexPath.row;

    //NSLog(@"sub array === %@, index Tracker = %i",subArray,indexTracker);
        cell.primaryLabel.text = [subArray objectAtIndex:indexPath.row];
        cell.secondaryLabel.text = [subTownArray objectAtIndex:indexPath.row];
    } else if (section == [sectionNamesArray count]-1) {

        int previousSection = section - 1;
        int previousNumRows = [set countForObject:[NSString stringWithFormat:[sectionNamesArray objectAtIndex:previousSection]]];
        NSRange range = NSMakeRange(previousNumRows+initNumRows,numOfRows);
        NSLog(@"previous num rows = %i and current num of rows = %i",previousNumRows,numOfRows);
        NSArray *subArray = [[namesArray subarrayWithRange:range] retain];
        NSArray *subTownArray = [[townArray subarrayWithRange:range]retain];
        cell.primaryLabel.text = [subArray objectAtIndex:indexPath.row];
        cell.secondaryLabel.text = [subTownArray objectAtIndex:indexPath.row];
        NSLog(@"sub array === %@",subArray);


    } else  {

        int previousSection = section - 1;


        int previousNumRows = [set countForObject:[NSString stringWithFormat:[sectionNamesArray objectAtIndex:previousSection]]];
        int location = previousNumRows;
        NSRange range = NSMakeRange(previousNumRows,numOfRows);
        NSLog(@"location = %i",location);
        NSLog(@"previous num rows = %i and current num of rows = %i",previousNumRows,numOfRows);
        NSArray *subArray = [[namesArray subarrayWithRange:range] retain];
        NSArray *subTownArray = [[townArray subarrayWithRange:range]retain];
        cell.primaryLabel.text = [subArray objectAtIndex:indexPath.row];
        cell.secondaryLabel.text = [subTownArray objectAtIndex:indexPath.row];

    }     //NSLog(@"section name = %@ . num of rows = %i",sectionName,numOfRows);





    return cell;
4

1 に答える 1

1

あなたは物事を複雑にしすぎていると思います。持っているデータを使用してセクション (セクション タイトルのみの辞書) を作成し、cellForRowAtIndexPath で次のようにします。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSDictionary *selRow = [[self.units valueForKey:[[[self.units allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];

...
}

その辞書を構築するために私が使用する方法は次のとおりです。

-(void)buildSectionKeysWithMutableArray:(NSMutableArray *)mutableArray {
    NSMutableString *prevUnit;
    units = [[NSMutableDictionary alloc] init];

    // Loop through the mutableArray passed in and build our keys
    for (NSDictionary *thisUnit in mutableArray)
    {
        NSString *unitName = [thisUnit objectForKey:@"LOCATION"];
        if (![prevUnit isEqualToString:unitName]) {
            [self.units setValue:[[NSMutableArray alloc] init] forKey:unitName];                
        }
        prevUnit = [NSString stringWithString:unitName];
    }

    // Loop again and add the keys into the units mutableDictionary
    for (NSDictionary *thisUnit in mutableArray)
    {
        [[self.units objectForKey:[thisUnit objectForKey:@"LOCATION"]] addObject:thisUnit];
    }

}

これにより、データのプレゼンテーションを動的に保つことができます。

于 2012-01-10T11:25:15.357 に答える