7

我正在 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 只有一列(由复选框组成)。

4

2 回答 2

9

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

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

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

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

除了 Apple 的文档,这里有一个很好的教程来完成这个任务。

祝你好运!

于 2009-08-20T15:05:54.823 回答
2

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

CocoaDev 很好地概述了该过程。您还可以阅读 Apple 的文档,以及 CocoaDev关于绑定的优秀文章。

于 2009-08-20T15:11:17.357 回答