使用2个数组填充section tableview

时间:2013-04-21 10:43:19

标签: ios objective-c uitableview

我想创建可以在分段表视图中显示位置信息的应用程序(如下所示)。

[section 1]
[row 1 - location information];
[row 2 - location information];

[section 2]
[row 1 - location information];
[row 2 - location information];
[row 3 - location information];
 ...

我的想法是创建2个数组。一个是节头的关键数组。另一个数组用于表视图行。 在我的应用程序中,键数组有3个对象。另一个数组有18个对象。即,有3个节标题,并在每个节中显示6个对象/表视图行。如何正确地将这些信息填充到节表视图中??

4 个答案:

答案 0 :(得分:0)

最好的解决方案是创建一个包含两个对象(即数组)的字典。 密钥可以是该部分的名称。

现在,使用一个对象(Dictionary),您可以获得所需的所有信息。

numberOfSections中的

只返回[NSDictionary allKeys] .count。 在cellForRow中根据indexPath从右侧数组中获取对象。 在numberOfRows中,只需根据indexPath从字典中获取正确的数组并返回对象的数量。

答案 1 :(得分:0)

//setting number of sections
- (int)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
    return [keyArray count];
}

//setting the title for the section
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSString *sectionName;
    sectionName = [keyArray objectAtIndex:section];
    return sectionName;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * MyIdentifier = @"MyIdentifier";
    UITableViewCell * cell = [self.tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
    }
    cell.textLabel.text = [otherArray objectAtIndex:indexPath.row];
    return cell;
}

希望这可以帮助你开始......

我的建议是使用字典。键是节的标题,值是行的标题。

答案 2 :(得分:0)

拥有单个阵列更好。您可以像这样格式化数组

[
    {
        "Title": "Title of section 1",
        "Rows": [
            {
                "Title": "Value 1",
                "SubTitle": "Value 2"
            },
            {
                "Title": "Value 1",
                "SubTitle": "Value 2"
            },
            {
                "Title": "Value 1",
                "SubTitle": "Value 2"
            }
        ]
    }
]

一个包含截面字典的主要数组。 Section将拥有自己的数据以及行的字典数组。

如果此结构存储在数组中。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
   [self.array count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSDictionary *section = self.array[section];
    NSArray *rows = section[@"Rows"];
    retrun [rows count];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSDictionary *section = self.array[section];
    return section[@"Title"];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //Initialization of cell

    NSDictionary *section = self.array[indexPath.section];
    NSArray *rows = section[@"Rows"];

    NSDictionary *row = rows[indexPath.row];

    NSString *title = row[@"Title"];
    NSString *sutTitle = row[@"SubTitle"];

    //Assign them

    return cell;


}

答案 3 :(得分:0)

如果有人还在寻找这个答案,我可以使用Swift

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("item", forIndexPath: indexPath)

    var item: Item!

    if indexPath.section == 0{
        item = array1[indexPath.row]
    }
    if indexPath.section == 1{
        item = array2[indexPath.row]
    }

    cell.textLabel?.text = item.name
    return cell
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
    if section == 0 {
        return array1.count
    }
    return array2.count
}