Nó khá đơn giản thực sự, một khi bạn nhận được để hiểu nó (tất nhiên!). Bạn không thể sử dụng NSArray trực tiếp như một nguồn bảng. Bạn cần tạo một đối tượng tùy chỉnh triển khai thực hiện NSTableViewDataSource hoặc triển khai giao thức đó trong một số lớp hiện có - thường là bộ điều khiển. Nếu bạn sử dụng Xcode để tạo một ứng dụng dựa trên tài liệu chuẩn, lớp trình điều khiển tài liệu - (nó sẽ được gọi là MyDocument) là một lớp tốt để sử dụng.
Bạn cần phải thực hiện hai phương pháp tối thiểu sau đây:
– numberOfRowsInTableView:
– tableView:objectValueForTableColumn:row:
Nếu bạn có một mảng có thể thay đổi mà giá trị mà bạn muốn sử dụng trong một cái nhìn bảng với một cột, giống như sau nên làm như một sự khởi đầu:
– numberOfRowsInTableView: (NSTableView*) aTableView
{
return [myMutableArray count];
}
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
return [myMutableArray objectAtIndex: rowIndex];
}
Nó vừa mới xảy ra với tôi rằng bạn có thể thêm hai phương pháp trên như một phạm trù để thay thế NSArray myMutableArray
với self
và sau đó bạn có thể sử dụng một mảng như một nguồn dữ liệu.
Dù sao, với một mảng có thể thay đổi, điều quan trọng là bất cứ lúc nào bạn thay đổi nó, bạn cần phải để cho xem bảng biết nó đã được thay đổi, vì vậy bạn cần gửi xem bảng -reloadData
.
Nếu chế độ xem bảng của bạn có nhiều cột và bạn muốn điền nó với thuộc tính của đối tượng trong mảng, bạn có thể thực hiện một mẹo để tự mình làm dễ dàng hơn.Hãy nói rằng các đối tượng trong mảng của bạn là trường hợp của một lớp được gọi là Người có hai phương pháp định nghĩa:
-(NSString*) givenName;
-(NSString*) familyName;
và bạn muốn xem bảng của bạn để có một cột cho mỗi người, bạn có thể thiết lập các identifier
tài sản của mỗi cột đến tên của bất động sản trong Person rằng hiển thị cột và sử dụng giống như sau:
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
Person* item = [myMutableArray objectAtIndex: rowIndex];
return [item valueForKey: [tableColumn identifier]];
}
Nếu bạn thay thế valueForKey:
với valueForKeyPath:
và lớp Person của bạn cũng có các phương pháp sau:
-(Person*) mother;
-(Person*) father;
-(NSString*) fullName; // concatenation of given name and family name
bạn có thể thêm cột bảng có số nhận dạng như: father.fullName
hoặc mother.familyName
và các giá trị sẽ được tự động điền.
liên kết này không hoạt động !! hãy cập nhật nó! – elin3t