0

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

[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

4 回答 4

0

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

现在,有了一个对象(字典),您就拥有了所需的所有信息。

在 numberOfSections 中只返回 [NSDictionary allKeys].count。在 cellForRow 中,根据 indexPath 从右边的数组中抓取对象。在numberOfRows中,只需根据indexPath从字典中抓取正确的数组,返回对象的个数即可。

于 2013-04-21T10:49:15.937 回答
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;
}

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

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

于 2013-04-21T10:50:08.910 回答
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"
            }
        ]
    }
]

一个包含部分字典的主数组。部分将有自己的数据加上行的字典数组。

如果这个结构存储在一个数组中。

- (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;


}
于 2013-04-21T11:00:42.440 回答
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
}
于 2016-01-29T16:43:44.743 回答