来自pList的分段UITableView可以深入查看子子视图

时间:2011-02-01 07:31:26

标签: iphone objective-c ios uitableview

我觉得这个问题真的很糟糕,因为有人帮助我得到了一半,但我确实在最后试着弄清楚这一点。

基本上我想要一个分段的UITableView,它可以从一个可以深入查看子视图的pList文件中加载它的数据。

如前所述,有人帮我从pList获取Sectioned UITableView,但我无法弄清楚如何深入研究

Heres his Source that he provided to me

我会在这里展示但我不太明白如何在没有看起来恶心的情况下显示代码= /

1 个答案:

答案 0 :(得分:1)

你可以在更深层次上重复同样的技巧。即,有单独的plist文件,名为“Section1Row1.plist”,“Section2Row2.plist”等。然后,您可以重用相同的视图控制器类,但使其加载的plist文件的名称取决于用户所做的选择。

另一种方法是将所有内容存储在一个大的plist文件中。然后每个选项(行)成为一个字典,包含标题和一个像原始层次一样的全新层次结构。然后将新视图控制器的“根”数组设置为您选择的选项,就像我在下面的示例代码和plist中所示。

如果你有很多选择或级别,这两种方法都会变得混乱。

- (void) viewDidLoad
{
    [super viewDidLoad];
    if (!self.tableData)
    {
        self.tableData = [NSArray arrayWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"Table" ofType: @"plist"]];
        self.title = @"Root";
    }
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.text = [[[[tableData objectAtIndex: indexPath.section] objectForKey: @"Rows"] objectAtIndex: indexPath.row] objectForKey: @"Title"];
    return cell;
}

- (void) tableView: (UITableView*) tableView didSelectRowAtIndexPath: (NSIndexPath*) indexPath;
{
    RootViewController* nextViewController = [[[RootViewController alloc] initWithNibName: @"RootViewController" bundle: nil] autorelease];
    NSDictionary* rowData = [[[tableData objectAtIndex: indexPath.section] objectForKey: @"Rows"] objectAtIndex: indexPath.row];
    NSArray* subtree = [rowData objectForKey: @"Subtree"];
    nextViewController.tableData = subtree;
    nextViewController.title = [rowData objectForKey: @"Title"];

    [self.navigationController pushViewController: nextViewController animated: YES];
}


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <dict>
        <key>Title</key>
        <string>Section1</string>
        <key>Rows</key>
        <array>
            <dict>
                <key>Title</key>
                <string>Row1</string>
                <key>Subtree</key>
                <array/>
            </dict>
            <dict>
                <key>Title</key>
                <string>Row2</string>
                <key>Subtree</key>
                <array>
                    <dict>
                        <key>Title</key>
                        <string>Table2Section1</string>
                        <key>Rows</key>
                        <array>
                            <dict>
                                <key>Title</key>
                                <string>Row1</string>
                                <key>Subtree</key>
                                <array/>
                            </dict>
                            <dict>
                                <key>Title</key>
                                <string>Row2</string>
                                <key>Subtree</key>
                                <array/>
                            </dict>
                        </array>
                    </dict>
                </array>
            </dict>
        </array>
    </dict>
</array>
</plist>