2009-08-20 3 views
7

나는 Cocoa에서 간단한 Todo 응용 프로그램을 만들고 있습니다. 내가 클래스 (그리고 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 

내가 콘센트 '테이블'을 가지고 및 버튼 클릭에 의해 호출 된 두 개의 액션 'addItem'과 'removeItem'.

방법이 있습니까 (물론 방법이 있습니다) NSTableView에서 선택한 행을 제거하고 새로운 행을 추가하려면 어떻게해야합니까? 사용자가 여러 행을 동시에 선택할 수 있습니까?

미리 감사드립니다.

아, 한 가지 더 : NSTableView에는 단 하나의 열 (체크 박스로 구성) 만 있습니다.

답변

9

코코아에서는 실제로 NSTableView에 행을 직접 추가/제거하지 않습니다. 데이터 소스의

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

이 방법은 테이블 뷰가 보내는 메시지에 응답 할 것이다 : 컨트롤러에, 당신은이 작업을 진행하기 위해 구현해야하는이 개 중요한 방법이있는 NSTableDataSource 프로토콜을 채택 할 수 있습니다 (인터페이스 빌더에서 구성)을 사용하여 테이블에 데이터 행을 채 웁니다. 이러한 메서드 구현에서는 메서드가 필요로하는 정보 (행 수, 특정 행의 셀 값)를 반환해야합니다.

addItemremoveItem 메서드는 행 데이터를 저장/삭제해야합니다 (사용자가 작성한 표현에 관계없이). 예를 들어 각 행을 나타내는 새 클래스를 만들어 NSMutableDictionary에 저장할 수 있습니다. 애플의 문서 게다가

는 여기 good tutorial for this task.

행운입니다!

+0

고마워요! 그 튜토리얼 바위! –

+0

NSTableViewDataSource (NSTableDataSource 아님)이며 int 대신 NSIntegers를 사용하십시오. – Tutankhamen

2

코코아를 사용하면 가장 쉬운 방법은 바인딩을 사용하는 것입니다. NSMutableArray의 인스턴스에 연결된 NSArrayController을 만들고 NSArrayControllerNSTableView에 바인딩합니다.

코코아 데프는 the procedure의 개요를 제공합니다. 또한 Apple의 documentation과 Coconoa의 우수한 article을 읽을 수 있습니다.

+0

첫 번째 링크가 작동하지 않습니다. –

관련 문제