下面來介紹一下UILocalizedIndexedCollation的使用步驟
1、首先新建一個model類礼搁,例如:我新建一個Person類掰伸,為了簡單點我就添加一個name屬性懂傀。回到你的Controller里面進行控件初始化,這里就不多說了扭仁。
2、初始化數(shù)據(jù)源數(shù)組晓折,例如:初始化存儲索引標題的數(shù)組、每個索引下的section的數(shù)組兽泄、數(shù)據(jù)源數(shù)組漓概,具體見下圖。
本地新建一個數(shù)組作為數(shù)據(jù)源病梢,例如: ?NSArray *localArray = @[@"林雨", @"林宏偉", @"周董", @"周樹人", @"周杰", @"阿華", @"阿梨", @"安冬", @"楊國棟", @"趙華", @"葉青", @"王曉敏", @"黨國傾", @"吳曉慧", @"任年華", @"陳庚", @"付海波", @"迪拜", @"滴華", @"鶴慶", @"杰斯", @"杰斌", @"牛羊"];
然后for循環(huán)添加并賦值Person類的name屬性保存到data數(shù)組里胃珍,例如下面代碼:
for (int i=0; i<localArray.count;i++) {
? ? ? ? ? Person *model = [Person new];
? ? ? ? ?model.name = localArray[i];
? ? ? ? ? [self.dataArray addObject:model];
}
3、下面開始對UILocalizedIndexedCollation進行初始化蜓陌。
UILocalizedIndexedCollation *collation = [UILocalizedIndexedCollation currentCollation];
//? ? 獲取collation的索引
NSUInteger sectionNumb = [[collation sectionTitles] count];
NSMutableArray *sectionArray = [[NSMutableArray alloc] init];
//? ? 循環(huán)索引觅彰,初始化空數(shù)組并加入到數(shù)據(jù)數(shù)組
for (NSInteger index = 0; index<sectionNumb;index++){
? ? ? ? ?[sectionArray addObject:[[NSMutableArray alloc] init]];
}
//? ? 1.便利數(shù)組中的元素
//? ? 2.獲取name值的首字母在26個字母中所在的位置
//? ? 3.把model對象加到相對應(yīng)的字母下的數(shù)組中去
for(Person *model in self.dataArray){
? ? ? ?NSUInteger sectionIndex = [collation sectionForObject:model ? ? ? ? collationStringSelector:@selector(name)];
? ? ? [sectionArray[sectionIndex] addObject:model];
}
//? ? 對每個section中的數(shù)組按照name屬性進行檢索排序(快速索引)
//? ? 1.獲取每個section下的數(shù)組
//? ? 2.對每個section下的數(shù)組進行字母排序
for(NSInteger index=0; index<sectionNumb;index++){
? ? ? ?NSMutableArray *personArrayForSection = sectionArray[index];
? ? ? ?NSArray *sortedPersonArrayForSection = [collation sortedArrayFromArray:personArrayForSection collationStringSelector:@selector(name)];
? ? ? ?sectionArray[index] = sortedPersonArrayForSection;
}
//? 新建一個temp空的數(shù)組(目的是為了在調(diào)用enumerateObjectsUsingBlock函數(shù)的時候把空的數(shù)組添加到這個數(shù)組里,在將數(shù)據(jù)源空數(shù)組移除钮热,或者在函數(shù)調(diào)用的時候進行判斷填抬,空的移除)
NSMutableArray *temp = [NSMutableArray new];
[sectionArray enumerateObjectsUsingBlock:^(NSArray *arr, NSUInteger idx, BOOL *stop) {
if (arr.count == 0) {
[temp addObject:arr];
} else {
[self.sectionTitlesArray addObject:[collation sectionTitles][idx]];
}
}];
[sectionArray removeObjectsInArray:temp];
self.sectionArray = sectionArray;
4、代理事項
#pragma mark 檢索返回標題數(shù)組個數(shù)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
? ? ? ? return self.sectionTitlesArray.count;
}
#pragma mark 返回每組下有多少條數(shù)據(jù)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
? ? ? ? ?return [self.sectionArray[section] count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *ID = @"Identifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
}
NSUInteger section = indexPath.section;
NSUInteger row = indexPath.row;
Person *model = self.sectionArray[section][row];
cell.textLabel.text = model.name;
cell.accessoryType = UITableViewCellAccessoryNone;
return cell;
}
// 按順序顯示tableview的HeaderInSection標題
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{? ?
? ? ? return [self.sectionTitlesArray objectAtIndex:section];
}
// 按順序顯示檢索字母(不返回就不顯示右邊索引內(nèi)容)
- (NSArray*)sectionIndexTitlesForTableView:(UITableView *)tableView{
? ? ? ?return self.sectionTitlesArray;
}
//? 點擊右邊索引執(zhí)行的代理方法隧期,可以在這里設(shè)置顯示手指滑動時候索引的標題(sectionIndexColor是設(shè)置字體顏色飒责,sectionIndexBackgroundColor背景顏色)
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
? ? self.titleLabel.hidden = NO;
? ? ?self.titleLabel.text = title;
? ? NSString *key = [self.sectionTitlesArray objectAtIndex:index];
? ? for (UIView *view in tableView.subviews) {
? ? ? ? NSLog(@"_________%@",view);
? ? ? if ([view isKindOfClass:NSClassFromString(@"UITableViewIndex")]) {
? ? }
}
? ? ?return [[UILocalizedIndexedCollation currentCollation] sectionForSectionIndexTitleAtIndex:index];
}
- (CGFloat)tableView:(UITableView *)tableView? heightForRowAtIndexPath:(NSIndexPath *)indexPath{
? ? ?return 60;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
? ? ?return 35;
}
做完這些就已經(jīng)完成UILocalizedIndexedCollation智能分組排序了,樣式就如下效果圖仆潮。