UILocalizedIndexedCollation的使用
UILocalizedIndexedCollation
是一个帮助我们组织列表数据的类,它能够根据地区来生成与之对应区域索引标题。不需要直接创建它的对象,我们可以通过 UILocalizedIndexedCollation +currentCollation
获得一个对应当前地区的单例对象。
下表可以帮助你了解不同地区区域索引标题的差别。如果你想要看这些的话,你需要把对应的地区加入到你的项目本地化列表中。
Locale | Section 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测试 */