繁体   English   中英

如何在UITableView中填充节

[英]How do I populate sections in UITableView

任何人都可以建议执行以下操作的最佳方法吗?

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

单击按钮后,它将转到UITableView,该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,则将其添加到三星级阵列中;如果旅馆名称是1B或2B,则将其添加到四星级阵列中。 但这是非常繁琐的,不是我能想到的最佳实践。 随着购物区包含数十家企业,它将变得更加乏味。 因此,我无法分别检查每个商户名称。 这是我将业务对象添加到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,然后根据其身份将其添加到其自己的数组/部分中?

为此,我更倾向于向我们提供一个NSMutableDictionary并将值固定在其中:

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

等等...然后,您可以专门获取数据,并且比将所有项目粘贴到1个数组中更为整洁。 然后,您可以通过键值在表格视图中区分各个部分。

你也不必投NSArray当您返回(假设self.filteredArrayNSArray )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM