2011-01-30 12 views
7

Tôi có chế độ xem bảng hiển thị các số liên lạc được sắp xếp theo thứ tự chữ cái và chia thành các phần.NSSortDescriptor - push # và các số ở cuối danh sách - iphone xcode

tôi đang sử dụng -

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:[dataSource keyName] ascending:YES]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

sau đó cho địa chỉ liên lạc mà không cần tên tôi đang sử dụng # dấu là chữ cái đầu tiên của họ vì vậy tất cả trong số họ sẽ được nhóm lại trong một nhóm.

mọi thứ đều tuyệt vời. điều duy nhất tôi muốn là đẩy phần # vào cuối bảng, như bây giờ nó cho thấy trong phần đầu của nó.

bất kỳ ý tưởng nào?

cảm ơn trước

Shani

Trả lời

7

Cách tốt nhất để làm điều này là để tạo ra mô tả tùy chỉnh loại của riêng bạn bằng cách sử dụng sortDescriptorWithKey: tăng dần: so sánh: Phương pháp. Điều này cho phép bạn tạo hàm so sánh của riêng bạn, mà bạn chỉ định bằng cách sử dụng một khối.

Trước tiên, hãy tạo hàm so sánh. Nếu bạn chưa bao giờ programmed with blocks trước đây, bây giờ là lúc để tìm hiểu!

NSComparisonResult (^myStringComparison)(id obj1, id obj2) = ^NSComparisonResult(id obj1, id obj2) { 

    // Get the first character of the strings you're comparing 
    char obj1FirstChar = [obj1 characterAtIndex:0]; 
    char obj2FirstChar = [obj2 characterAtIndex:0]; 

    // Check if one (but not both) strings starts with a '#', and if so, make sure that one is sorted below the other 
    if (obj1FirstChar == '#' && obj2FirstChar != '#') { 
     return NSOrderedDescending; 
    } else if (obj2FirstChar == '#' && obj1FirstChar != '#') { 
     return NSOrderedAscending; 
    } 
    // Otherwise return the default sorting order 
    else { 
     return [obj1 compare:obj2 options:0]; 
    } 
}; 

Bây giờ bạn có chức năng so sánh của bạn, bạn có thể sử dụng nó để tạo ra một mô tả loại:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:[dataSource keyName] ascending:YES comparator:myStringComparison]; 

Bây giờ bạn có thể sử dụng mô tả loại giống như bạn làm bất kỳ khác, và danh sách của bạn sẽ có # mục được sắp xếp để kết thúc!

+0

'NSComparisonResult (^ myStringComparison) (id obj1, id obj2) =^NSComparisonResult (id obj1, id obj2) {...};'? Tôi hiểu nó hoạt động như thế nào, nhưng xây dựng ngôn ngữ là gì? Nó chỉ là một chức năng? –

+0

Đó là một đối tượng khối, giống như một chức năng thông thường. Bạn có thể [đọc thêm về chúng trong tài liệu của Apple] (http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html). – sgress454

+0

Cũng xin cảm ơn tôi. –

Các vấn đề liên quan