2012-06-19 31 views
7

Tôi có hai coloumn trong NSTableView là Tên và Mức lương với giá trị 5-10. Tôi muốn sắp xếp các coloumn sau khi nhấp vào tiêu đề của cả hai cột. Có rất nhiều dữ liệu có trong Internet nhưng tôi không thể sử dụng chúng. Xin hãy giúp tôi làm điều này trong ca cao.Sắp xếp NSTableView

Cảm ơn bạn trước và đánh giá cao mọi trợ giúp.

+0

Tôi có hai cột trong bảng, như Tên và Lương, tôi đặt giá trị hardcoded mà không có ràng buộc, Bây giờ tôi muốn sắp xếp dữ liệu, cách tôi thực hiện nhiệm vụ này. – upender

Trả lời

12

Mỗi cột bảng có một phương pháp setSortDescriptorPrototype Sắp xếp mô tả những cách nói mảng làm thế nào để sắp xếp tự (tăng dần, giảm dần, bỏ qua trường hợp, vv) lặp qua từng cột mà bạn muốn như sắp xếp được và gọi phương pháp này trên mỗi người trong số các cột, và thông qua các mô tả loại yêu cầu (trong trường hợp của tôi, tôi sẽ sử dụng nhận dạng cột)

for (NSTableColumn *tableColumn in tableView.tableColumns) { 

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:tableColumn.identifier ascending:YES selector:@selector(compare:)]; 
    [tableColumn setSortDescriptorPrototype:sortDescriptor]; 
} 

Sau khi viết đoạn mã này khởi, NSTableViewDelegate có một phương pháp - (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors rằng thông báo cho bạn bất cứ khi nào một loại bộ mô tả được thay đổi, thực hiện phương thức này trong ủy nhiệm và gửi một thông điệp đến dữ liệu arr ay để sắp xếp tự

- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors 
{ 
    self.data = [self.data sortedArrayUsingDescriptors:sortDescriptors]; 
    [aTableView reloadData]; 
} 

Phương pháp này sẽ bị sa thải mỗi lần một tiêu đề cột được nhấp, và NSTableColumn cho thấy một hình tam giác nhỏ thoải mái thể hiện thứ tự sắp xếp.

6

Tôi tình cờ gặp câu hỏi này trong khi tìm cách dễ nhất để thực hiện điều gì đó tương tự. Mặc dù câu hỏi ban đầu là cũ, tôi hy vọng ai đó tìm thấy câu trả lời của tôi hữu ích! Xin lưu ý rằng tôi đang sử dụng Xcode 5.1.1

Ok như vậy để làm được điều này bạn cần phải:

  1. chọn cột thực tế bạn muốn sắp xếp trong bảng.
  2. Trong Thanh tra thuộc tính, bạn cần phải điền vào hai trường: Sắp xếp khóa và chọn.
  3. Trong trường Khóa sắp xếp, bạn cần phải nhập giá trị của Số nhận dạng của mình. Giá trị của Mã định danh của bạn nằm trong Thanh tra danh tính của bạn.
  4. Trong trường Bộ chọn, bạn cần nhập phương thức chọn phù hợp dựa trên loại đối tượng trong cột. Phương thức mặc định là; so sánh:

Dựa trên Hướng dẫn lập trình xem bảng cho Mac. Phương thức so sánh: làm việc với các đối tượng NSString, NSDate và NSNumber. Nếu cột bảng của bạn chỉ chứa các chuỗi, bạn có thể muốn xem xét sử dụng phương thức caseInsensitiveCompare: nếu trường hợp nhạy cảm không quan trọng. Tuy nhiên, hãy xem xét thay thế các chữ ký phương thức này bằng các phương thức localizedCompare: hoặc localizedCaseInsensitiveCompare: để đưa vào tài khoản yêu cầu ngôn ngữ của người dùng.

Cuối cùng, bạn cần khai báo tableView: sortDescriptorsDidChange: phương pháp trong Xem Bảng điều khiển của bạn trong định dạng hiển thị dưới đây:

-(void)tableView:(NSTableView *)mtableView sortDescriptorsDidChange:(NSArray *)oldDescriptors 
{ 
    [listArray sortUsingDescriptors: [mtableView sortDescriptors]]; 
    [tableView reloadData]; 
} 
+1

Trường khóa sắp xếp phải là thuộc tính trong đối tượng dữ liệu, không phải là số nhận dạng của cột. (mặc dù chúng có thể giống nhau) – tagy22