在Objective-C中向/从NSTableView添加/删除行

时间:2009-08-20 14:53:32

标签: objective-c cocoa nstableview

我在Cocoa中制作了一个简单的Todo应用程序。我已经添加了一个类(和一个NSObject到XIB)MATodoController:

MATodoController.h

#import <Cocoa/Cocoa.h>


@interface MATodoController : NSObject
{
    IBOutlet NSTableView *table;
}

- (IBAction)addItem:(id)sender;
- (IBAction)removeItem:(id)sender;

@end

MATodoController.m

#import "MATodoController.h"


@implementation MATodoController

- (void)addItem:(id)sender
{

}

- (void)removeItem:(id)sender
{

}

@end

我有一个NSTableView的插座'表'和按钮点击调用的两个动作'addItem'和'removeItem'。

有没有办法(当然有办法)如何在NSTableView中添加新行/删除选定的行(用户可以一次选择多行)?

提前致谢。

哦,还有一件事:NSTableView只有一列(由复选框组成)。

2 个答案:

答案 0 :(得分:9)

在Cocoa中,您并没有直接向NSTableView添加/删除行。在您的控制器中,您可能希望采用NSTableDataSource协议,该协议有两个重要的方法需要实现才能使其正常工作:

- (int) numberOfRowsInTableView:(NSTableView *)aTableView
- (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex

这些方法将响应表视图发送给它的数据源(在Interface Builder中配置)的消息,以便用数据行填充表。在这些方法实现中,您必须通过查询您已经计算出的任何数据存储来返回该方法所需的信息(行数;特定行中单元格的值)。

您的addItemremoveItem方法还需要存储/删除行数据(以您编写的任何表示形式)。您可以创建一个表示每一行的新类,并将它们存储在NSMutableDictionary中,例如。

除了Apple的文档,这里还有good tutorial for this task.

祝你好运!

答案 1 :(得分:2)

使用Cocoa,最简单的方法是使用绑定。创建NSArrayController,链接到NSMutableArray的实例,并将NSArrayController绑定到NSTableView

CocoaDev概述了the procedure。您还可以阅读Apple的documentation和CocoaDev关于绑定的优秀article