【问题标题】:Add/remove rows to/from NSTableView in Objective-C在 Objective-C 中向/从 NSTableView 添加/删除行
【发布时间】:2010-11-21 08:39:27
【问题描述】:

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

【问题讨论】:

    标签: objective-c cocoa nstableview


    【解决方案1】:

    在 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.

    祝你好运!

    【讨论】:

    • NSTableViewDataSource(不是 NSTableDataSource)并使用 NSIntegers 而不是 ints。
    【解决方案2】:

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

    CocoaDev 很好地概述了the procedure。您还可以阅读 Apple 的 documentation 和 CocoaDev 的出色的 article 关于绑定。

    【讨论】:

      猜你喜欢
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 2013-02-06
      相关资源
      最近更新 更多