如何在OSX中获得动态变化的NSTableView

时间:2014-02-06 21:02:08

标签: objective-c macos cocoa nstableview

我是Mac的新手。我熟悉iOS编码的UITableView,但似乎无法使NSTableView在我的应用程序上正常工作。是的,我查看了文档和教程,但是我无法获得所需的结果。我期望的结果应该是非常基本和简单的,但我被困在TableViews上。我真的希望它的功能更像是它如何使用UITableView,而不是它似乎想要使用NSTableView。我不想添加或删除行。我只需要1列,我真的希望它像按下一个按钮列表一样工作,并在下一个NSView上的同一屏幕上触发与该选项相关的内容。

(我在一个屏幕上有3个视图。第一个是左侧的主菜单,按下时触发tableView显示子菜单。选择该选项后,它会打开屏幕最右侧的内容。无论如何都希望得到结果。)

目前没有任何内容填充tableview。这就是它目前的样子。

·H

@interface RootViewController : NSViewController <NSTableViewDataSource>{
IBOutlet NSView *mainMenuView;
IBOutlet NSTableView *tableView;
NSMutableArray *options;

}

-(IBAction)mainMenuBtn:(id)sender;

@end

的.m

@interface RootViewController ()

@end

@implementation RootViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        options = [[NSMutableArray alloc] init];
    }
    return self;
}

-(void)viewDidLoad{

}

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

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

-(IBAction)mainMenuBtn:(id)sender{
    NSLog(@"1");
    [options addObject:@"Strain 1"];
    NSString *test = [options objectAtIndex:0];
    NSLog(test);
    [tableView reloadData];

}

目前我在NIB中将tableView连接到TableView。我试图将dataSource连接到文件的所有者,但这不起作用。似乎找不到任何其他地方来连接它。任何建议将不胜感激。感谢

1 个答案:

答案 0 :(得分:0)

首先,NSTableView的dataSource必须连接到Interface Builder中的RootViewController实例,或者通过代码连接。 对我来说似乎有些怀疑的是:

return [[options objectAtIndex:row] valueForKey:[tableColumn identifier]];

我不知道[tableColumn identifier]的值是什么,但它必须与您添加到数组的对象的属性相匹配。我可以看到你添加的对象是字符串,因此[tableColumn identifier]必须是类NSString的属性。如果您使用字符串作为数组的对象,请尝试使用:

return [options objectAtIndex:row];