2009-08-20 22 views
7

私はCocoaで簡単なTodoアプリケーションを作成しています。 Iクラス(及びXIBにNSObjectの)MATodoController追加しました:NSTableViewにObjective-CのNSTableViewへの行の追加/削除

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 

I出口 'テーブル' がおよびボタンのクリックによって呼び出される2つのアクション 'addItem'と 'removeItem'。

方法はありますか? NSTableViewとの間で選択した行を削除するにはどうしたらいいですか?ユーザーは複数の行を同時に選択できますか?

ありがとうございます。

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

答えて

9

Cocoaでは、実際にはNSTableViewに直接行を追加/削除しません。これらのメソッドは、テーブルビューは、それのデータ・ソースに送信するメッセージに応答します

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

:あなたのコントローラでは、あなたは、この作業を取得するために実装する必要がある2つの重要なメソッドを持っている、NSTableDataSourceプロトコルを採用する場合があります(Interface Builderで設定されている)を使用して、テーブルにデータの行を設定します。これらのメソッドの実装では、処理したデータストアを照会することによって、メソッドが必要とする情報(行数、特定の行のセルの値)を返す必要があります。

addItemremoveItemメソッドでは、行データの保存/削除が必要です(作成した表現はすべて)。各行を表す新しいクラスを作成し、NSMutableDictionaryなどに格納することもできます。

Appleのドキュメントに加えて、ここでgood tutorial for this task.

幸運です!

+0

ありがとうございます!そのチュートリアルは揺れる! –

+0

NSTableViewDataSource(NSTableDataSourceではない)で、intsの代わりにNSIntegersを使用します。 – Tutankhamen

2

ココアの場合、これを行う最も簡単な方法はバインディングです。 NSMutableArrayのインスタンスにリンクされたNSArrayControllerを作成し、NSArrayControllerNSTableViewにバインドします。

CocoaDevは、the procedureの概要を示しています。また、Appleのdocumentationと、CocoaDevの優れたarticleをバインディングで読むことができます。

+0

最初のリンクは死んでいます。 –

関連する問題