如何在UITableView中填充部分

时间:2013-11-26 11:24:35

标签: ios uitableview csv

有人可以建议最好的方法吗?

我有一个带有3个按钮的UIViewController。为清楚起见,按钮是: 1.酒店 2.购物 3.室内活动

点击一下按钮,它将转到UITableView,该视图将包含与该按钮关联的商家列表。 点击酒店,将显示酒店列表。

但我的问题如下。

对于酒店和购物,UITableView需要有部分去除四星级酒店的三星级酒店。 对于购物,UITableView中必须至少有12个不同的部分。 室内活动没有任何部分 - 只有企业名单。

要填充UITableView,我从.csv文件中读取所有商家的列表。 在我的.csv文件中,我为每组企业提供了一个ID,例如酒店(3星和4星)都是ID 1,购物(所有12个不同的部分)是ID 2,室内活动是ID 3 以下是.csv文件的示例。

ID, Company Name, Address, Tel, Email, Website, Details, Image Name

我已经设法读取了一个群组中的商家列表,但我无法将酒店和购物分成几个部分。 我尝试了以下内容。对于例如酒店我添加2个阵列,然后检查每个酒店的名称。如果酒店名称是例如在图1A或2A中,我将它添加到3星阵列中,并且如果它是例如1B或2B我将它添加到4星阵列。 但这是非常乏味的,而不是我想象的最佳实践。 由于购物区包含数十家企业,它将变得更加乏味。所以我不能单独检查每个商业名称。 以下是我如何将Business Objects添加到NSMutableArray _array以定义节。 但就像我提到的那样,要检查所有的商业名称,这将变得非常繁琐。

- (NSArray *) csvArray2PresidentsArray:(NSArray *)csvArray
{
    int i = 0;

    for (NSArray *row in csvArray)
    {
        // The first row is a header - SKIP
        if (i > 0)
        {
            BusinessDetailContent *_businessDetailContent = [[BusinessDetailContent alloc] init];
            _businessDetailContent.no           = [row objectAtIndex:0];
            _businessDetailContent.companyName  = [row objectAtIndex:1];
            _businessDetailContent.address      = [row objectAtIndex:2];
            _businessDetailContent.tel          = [row objectAtIndex:3];
            _businessDetailContent.email        = [row objectAtIndex:4];
            _businessDetailContent.website      = [row objectAtIndex:5];
            _businessDetailContent.details      = [row objectAtIndex:6];      
            _businessDetailContent.imageName    = [row objectAtIndex:7];

            // USE TO FILTER RESULTS
            NSString *strFromInt = [NSString stringWithFormat:@"%d", self.tagNumber];

            if ([_businessDetailContent.no isEqualToString:@"1A"] || 
            [_businessDetailContent.no isEqualToString:@"2A"])

            {
                [_threeStarArray addObject: _businessDetailContent];
            }

    else if ([_businessDetailContent.no isEqualToString:@"1B"] || 
                 [_businessDetailContent.no isEqualToString:@"2B"])

            {
        [_fourStarArray addObject: _businessDetailContent];
            }  
        }
        i++;
    }

    [_array addObject: _threeStarArray];
[_array addObject: _fourStarArray];

    return (NSArray *) self.filteredArray;
}

有没有更好的方法来检查/处理这个?我曾想过要在.csv文件中添加另一个字段来定义例如酒店为3或4星级。所有业务都一样。 然后在上面的代码中,我可以只扫描这个辅助ID,并根据它是什么,我将它添加到自己的数组/部分?

1 个答案:

答案 0 :(得分:1)

为此,我更倾向于使用NSMutableDictionary并将值保留在那里:

[aDict setValue:threeStarArray forKey:@"three_star"];

等......然后你可以专门抓取数据并且它更整洁,而不是将所有项目都放在一个数组中。然后,您可以通过键值区分表格视图中的部分。

此外,您不需要在返回时投放NSArray(假设self.filteredArrayNSArray)。