在UITableView和NSArray中使用多节

时间:2014-01-15 08:31:28

标签: ios xcode uitableview

我需要在UITableView中有61个部分,这意味着我必须有61个NSArray,对吧?!

首先我定义了61个NSArray,并且视图中的init确实加载了

使用此代码已经很累了

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.

    switch (section) {
        case 0: 
           return [searchArray_1 count]; 
           break;
        case 1: 
           return [searchArray_2 count]; 
           break;
        case 2: 
           return [searchArray_3 count]; 
           break;
        case 3: 
           return [searchArray_4 count]; 
           break;
          ...
        case 60: 
           return [searchArray_61 count]; 
           break;
    }
    return 1;
 }

和配置单元格中的此代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [self.myTable dequeueReusableCellWithIdentifier:CellIdentifier];

    switch (indexPath.section) {
        case 0:
            cell.textLabel.text = [searchArray_1 objectAtIndex:indexPath.row];
            break;
        case 1:
            cell.textLabel.text = [searchArray_2 objectAtIndex:indexPath.row];
            break;
        case 2:
            cell.textLabel.text = [searchArray_3 objectAtIndex:indexPath.row];
            break;
           ...
        case 60:
            cell.textLabel.text = [searchArray_61 objectAtIndex:indexPath.row];
            break;

        default:
            break;
    }

    return cell;
}

它工作正常,但我怎样才能减少数组

4 个答案:

答案 0 :(得分:3)

你需要另一个阵列。

NSArray * sectionArray = @[searchArray_1, searchArray_2, ...., searchArray_61] ;

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    NSArray * array = sectionArray[section] ;
    return [array count] ;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [self.myTable dequeueReusableCellWithIdentifier:CellIdentifier];
    NSArray * array = sectionArray[indexPath.section] ;
    cell.textLabel.text = array[indexPath.row] ;
    return cell;
}

答案 1 :(得分:0)

您可以制作一个包含所有数组的NSDictionary,例如(假设您有一个类型为NSDictionary且属性名为database的属性);

self.database = @{ @1 : myArray1, @2:myArray2:};

你仍然需要手动填写它。但是在你的cellForRowAtIndexPath中:你可以这样做:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    NSArray *arrayToUse = self.database[@(indexPath.row)];
    UITableViewCell *cell = [self.myTable dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.textLabel.text = arrayToUse[indexPath.row];
    return cell;
}

因此,您将使用indexPath.row查找NSArray中的正确NSDictionary

答案 2 :(得分:0)

使用 Plist数据库 .plist数据库生成Dictionary.that存储所有Array.so,你可以使用键和值对简单地访问特定的数组。我认为这是最好的方法...

答案 3 :(得分:0)

您可以使用字典。在您的情况下,您需要61个键值对。获得61个部分你可以使用

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [dictionary allKeys].count;
}

要在每个部分中获得所需的行数,请执行以下方法。

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

}

要使用值填充所有单元格,请执行以下委托方法。

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

}

此处将正确的数据输入表中您需要根据部分指定特定键的值。