UILocalizedIndexedCollation的使用

UILocalizedIndexedCollation 是一个帮助我们组织列表数据的类,它能够根据地区来生成与之对应区域索引标题。不需要直接创建它的对象,我们可以通过 UILocalizedIndexedCollation +currentCollation 获得一个对应当前地区的单例对象。

下表可以帮助你了解不同地区区域索引标题的差别。如果你想要看这些的话,你需要把对应的地区加入到你的项目本地化列表中。

LocaleSection Index Titles
en_US A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, #
ja_JP A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, あ, か, さ, た, な, は, ま, や, ら, わ, #
sv_SE A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, Å, Ä, Ö, #
ko_KO A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, ㄱ, ㄴ, ㄷ, ㄹ, ㅁ, ㅂ, ㅅ, ㅇ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ, #
+ (instancetype)currentCollation;

// 分组结果的标题列表 (例 A-Z,# in US/English)
@property(nonatomic, readonly) NSArray<NSString *> * sectionTitles;
@property(nonatomic, readonly) NSArray<NSString *> *sectionIndexTitles;
// Specifies the section that should be scrolled to for the title at the given index.
// This method allows you to map between a given item in the index
// and a given section where there isn't a one-to-one mapping.
- (NSInteger)sectionForSectionIndexTitleAtIndex:(NSInteger)indexTitleIndex;

//返回包含该对象的索引位置
// selector 必须返回一个NSString.
- (NSInteger)sectionForObject:(id)object collationStringSelector:(SEL)selector;

// 对一个数字进行快速排序,同样selector 必须返回一个NSString
- (NSArray *)sortedArrayFromArray:(NSArray *)array collationStringSelector:(SEL)selector;

 

对数组中TestModel按照首字母进行排序,如下:

第一种方法:没有创建selector方法,直接采用的TestModel 的 testName的get方法,进行排序,但是排序后结果是【#,A-Z】。但我想要的是【A-Z, #】的顺序

创建第二种方法:创建testSelector方法,对testName进行处理后返回

如果没有特殊要求,可以直接用tetsModel的get方法,- (NSArray *)sortedArrayFromArray:(NSArray *)array collationStringSelector:(SEL)selector 中的selector可以是任何返回NSString参数的方法,要是有特殊需求可以自定义selector。

@interface TestModel : NSObject
@property(nonatomic, copy) NSString *testname;
@end

@implementation TestModel
- (NSString *)testSelector {
    NSString *regex = @"^[\u4e00-\u9fa5A-Za-z].*$";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    BOOL isValid = [predicate evaluateWithObject:self.testname];
    if (isValid) {
        return self.testname;
    }
    return [NSString stringWithFormat:@"ZZZZZZZZ%@", self.testname];
}
@end
NSMutableArray *mut = [NSMutableArray array];
    TestModel *model1 = [TestModel new];
    model1.testname = @"@驾照";
    [mut addObject:model1];
    
    TestModel *model2 = [TestModel new];
    model2.testname = @"123测试";
    [mut addObject:model2];
    
    TestModel *model3 = [TestModel new];
    model3.testname = @"A汽车";
    [mut addObject:model3];
    
    TestModel *model4 = [TestModel new];
    model4.testname = @"快速";
    [mut addObject:model4];
    
    TestModel *model5 = [TestModel new];
    model5.testname = @"软件";
    [mut addObject:model5];
    
    UILocalizedIndexedCollation *collation = [UILocalizedIndexedCollation currentCollation];
    NSArray *sortMut = [collation sortedArrayFromArray:mut collationStringSelector:@selector(testname)];
    for (TestModel *p in sortMut) {
        NSLog(@"%@", p.testname);
    }
    /*
     @驾照
     123测试
     A汽车
     快速
     软件
     */
    
    NSArray *customSort = [collation sortedArrayFromArray:mut collationStringSelector:@selector(testSelector)];
    for (TestModel *p in customSort) {
        NSLog(@"%@", p.testname);
    }
    /*
     A汽车
     快速
     软件
     @驾照
     123测试
     */

 

posted @ 2017-10-27 17:01  笑薇薇smile  阅读(358)  评论(0编辑  收藏  举报