7

Cocoa で簡単な Todo アプリケーションを作成しています。クラス (および XIB への NSObject) 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 へのアウトレット「テーブル」と、ボタンのクリックによって呼び出される 2 つのアクション「addItem」と「removeItem」があります。

方法はありますか (もちろん方法はあります)新しい行を追加したり、NSTableView から選択した行を削除したりするにはどうすればよいですか (ユーザーは一度に複数の行を選択できます)。

前もって感謝します。

ああ、もう 1 つ: NSTableView には 1 つの列しかありません (チェックボックスで構成されています)。

4

2 に答える 2

9

Cocoa では、NSTableView に行を直接追加/削除することはありません。コントローラーでは、これを機能させるために実装する必要がある 2 つの重要なメソッドを持つ NSTableDataSource プロトコルを採用することをお勧めします。

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

これらのメソッドは、テーブル ビューがデータ ソース (Interface Builder で構成) に送信するメッセージに応答して、テーブルにデータ行を入力します。これらのメソッドの実装では、作成したデータ ストアにクエリを実行して、メソッドが必要とする情報 (行数、特定の行のセルの値) を返す必要があります。

メソッドaddItemremoveItemメソッドは、行データを保存/削除する必要もあります (作成した表現で)。たとえば、各行を表す新しいクラスを作成し、それらを NSMutableDictionary に格納できます。

Apple のドキュメントのほかに、このタスクに関する優れたチュートリアルがあります。

幸運を!

于 2009-08-20T15:05:54.823 に答える
2

Cocoa でこれを行う最も簡単な方法は、バインディングを使用することです。NSArrayControllerのインスタンスにリンクされた を作成しNSMutableArray、 を にバインドしNSArrayControllerますNSTableView

CocoaDev は、手順の概要を説明しています。また、Apple のドキュメントや CocoaDev のバインディングに関する優れた記事も読むことができます。

于 2009-08-20T15:11:17.357 に答える