在Obj-C中逐行填充TableView

时间:2011-06-12 11:52:59

标签: objective-c tableview

我正在寻找一种从单个文档填充表视图的方法,即我想加载.po文件。 我希望我的表视图的每一行都能从PO文件加载一行文本。

理想情况下,我想在第一列中有一行,在第二列中有相应的翻译(以获得内容的清晰视图)。

我还没有多少关于表格的观点,所以请原谅我的无知! 我已经完成了我的研究,但我发现苹果文档令人困惑且非常不清楚 - 并且在网上找不到太多......

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您不会将数据推送到表格视图,而是从您那里提取数据。这可以通过绑定或通过实现表视图数据来完成(在NS *和UI *平台之间有点不同,但大致相同)。

NSTableViewUITableView文档都包含指向示例和编程指南的链接。阅读这些内容,如果仍然没有得到,请提出具体问题。

答案 1 :(得分:3)

bbum是正确的,你没有将数据推送到你的桌面,你提供它并且表格显示它。星期五我做了一个快速的模拟,把文本文件逐行显示,所以也许有些代码可以帮助一些。

获取与其数据源的插座连接的表格视图,然后您可以执行以下操作:

// Class variable in your table delegate object
    NSArray* lineList;
    IBOutlet NSTableView* table;

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
    return [lineList count];
}


- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    return [lineList objectAtIndex:row];
}

// Be sure to use the proper encoding for your text file
// do something like this to load your text file.
- (void) loadData:(NSString*)ourPath
{
    NSError* err = nil;
    NSString* fullFileText = [NSString stringWithContentsOfFile:ourPath encoding:NSMacOSRomanStringEncoding error:&err];
    if (err)
        NSLog(@"Err: %@, %d", [err localizedDescription], [err code]);

    if (fullFileText)
    {
        lineList = [[fullFileText componentsSeparatedByString:@"\n"] retain];
        [table reloadData];
    }
}

在您的情况下,您可能希望保留一组字典,为文本的两个版本使用不同的键。这样你就可以有两列。当调用tableView:objectValueForTableColumn:时,NSTableColumn将告诉您将要绘制哪个列。你在这里的另一个选择是创建一个自定义单元格,其中包含两个字段,但这可能是你所要求的过度杀伤。

另请注意,您可以添加许多其他可选的委托调用,以便更灵活地显示数据。

此外,对于更具动态性的复杂任务,我发现绑定更好。如果你对他们感到不舒服,他们可能会感到困惑。对于简单的桌子来说,走这条路线往往同样容易。祝你好运!