tableView 添加索引和根據(jù)索引分類


@interface FZAddressBookListViewController () <UITableViewDelegate,UITableViewDataSource>

@property(nonatomic,strong)UITableView *tableView;
@property(nonatomic,strong)NSMutableArray *dataArray; //請求到的數(shù)據(jù)
@property(nonatomic,strong)NSMutableArray *indexTitles; //索引title
@property(nonatomic,strong)NSMutableDictionary *groupListDic; //索引對(duì)應(yīng)數(shù)據(jù) 
@end

@implementation FZAddressBookListViewController
{
    MBProgressHUD *hud;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    [self configUI];
    [self getListData];
}

-(void)configUI{
    _tableView = [[UITableView alloc]init];
    _tableView.sectionIndexColor = [UIColor blackColor];
    _tableView.tableFooterView=[[UIView alloc]init];
    _tableView.sectionIndexBackgroundColor=[UIColor clearColor];
    _tableView.delegate=self;
    _tableView.dataSource=self;
    [self.view addSubview:_tableView];
    [_tableView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(self.view);
        make.left.mas_equalTo(self.view);
        make.size.mas_equalTo(self.view);
    }];
    [MBProgressHUD showMessage:@"" toView:self.view];
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 70;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    
    if (self.indexTitles.count > 0) {
        NSString *key=self.indexTitles[section];
        NSMutableArray *keyArray = [self.groupListDic objectForKey:key];
        return keyArray.count;
    }
    return  0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    FZAddressBookTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"celladd"];
    if (!cell) {
        cell = [[FZAddressBookTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"celladd"];
    }
    
    if (self.dataArray.count > 0) {
        
        NSString *key=self.indexTitles[indexPath.section];
        NSMutableArray *keyArray = [self.groupListDic objectForKey:key];
        cell.model=(FZAddressUserModel *)[keyArray objectAtIndex:indexPath.row];
    }
    return  cell;
    
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return self.indexTitles.count;
}

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 25;
}

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    UIView *bgView =[[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 25)];
    bgView.backgroundColor=[UIColor colorWithHexString:@"EAEAEA"];
    FZLabel *lab =[[FZLabel alloc]initWithTextColorHex:@"666666" font:13 textAlignment:NSTextAlignmentLeft];
    [bgView addSubview:lab];
    lab.frame=CGRectMake(20, 0, 90, 25);
    if (self.indexTitles.count > 0) {
        lab.text =(NSString *) self.indexTitles[section];
    }
    return bgView;
}

- (nullable NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView; {
    if (self.indexTitles.count > 0) {
        return self.indexTitles;
    }
    return nil;
}

-(NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString*)title atIndex:(NSInteger)index{
    NSLog(@"title,index %@,%ld",title,index);
    return index;
}

-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
    for (UIView *view in [tableView subviews]) {
        if ([view isKindOfClass:[NSClassFromString(@"UITableViewIndex") class]]) {
            

           // 設(shè)置字體大小
            [view setValue:[UIFont systemFontOfSize:15.0 weight:UIFontWeightRegular] forKey:@"_font"];
            
            [view setValue:[UIColor colorWithHexString:@"1E90FF"] forKey:@"_indexColor"];
            
           //設(shè)置view的大小
            view.bounds = CGRectMake(2, 0, 30, 30);
            //單單設(shè)置其中一個(gè)是無效的
        }
    }
}


#pragma mark --- 數(shù)據(jù)請求

-(void)getListData{
    [FZRequestTools getStudentsByTeacherId:[FZUserInfo sharedUtil].colUid handler:^(BOOL success, NSString *msg, id response) {
        if (success) {
              NSArray *responseArray=[response objectForKey:@"response"];
              NSMutableArray *modelArray=[[NSMutableArray alloc]init];
              NSMutableArray *allFirstLetters=[[NSMutableArray alloc]init];
              for (NSDictionary *dic in responseArray) {
                FZAddressUserModel *model=[FZAddressUserModel mj_objectWithKeyValues:dic];
                  [modelArray addObject:model];
                  
                  NSString *firstLetter = [self firstCharactor:model.userName];
                  [allFirstLetters addObject:firstLetter];
              }
             allFirstLetters = [allFirstLetters valueForKeyPath:@"@distinctUnionOfObjects.self"];
            
             self.indexTitles= [NSMutableArray arrayWithArray:[allFirstLetters sortedArrayUsingSelector:@selector(compare:)]];
             [self.dataArray addObjectsFromArray:modelArray];
             [self sortedResult];
             [self->_tableView reloadData];
             [MBProgressHUD hideHUDForView:self.view];
        }else{
            
        }
    }];
}

#pragma mark -- suoyin

-(void)sortedResult{
    
    for (NSString *keyLetter in self.indexTitles) {
        NSMutableArray *tempArray =[[NSMutableArray alloc]init];
        [self.groupListDic setObject:tempArray forKey:keyLetter];
    }
    
        
         
    for (NSString *letter in self.indexTitles) {
              
        NSMutableArray *tempkArray =[[NSMutableArray alloc]init];
        tempkArray = [self.groupListDic objectForKey:letter];
           
        for (FZAddressUserModel *uModel in self.dataArray) {
            if ([[self firstCharactor:uModel.userName] isEqualToString:letter]) {
                [tempkArray addObject:uModel];
            }
        }
        [self.groupListDic setObject:tempkArray forKey:letter];
    }
}

- (NSString *)firstCharactor:(NSString *)aString

{
    //轉(zhuǎn)成了可變字符串
    NSMutableString *str = [NSMutableString stringWithString:aString];
    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);//先轉(zhuǎn)換為帶聲調(diào)的拼音
    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);//再轉(zhuǎn)換為不帶聲調(diào)的拼音
    NSString *pinYin = [str capitalizedString];//轉(zhuǎn)化為大寫拼音
    
    //獲取并返回首字母
    return [pinYin substringToIndex:1];
}

-(NSMutableArray *)dataArray{
    if (!_dataArray) {
        _dataArray=[[NSMutableArray alloc]init];
    }
    return _dataArray;
}

-(NSMutableArray *)indexTitles{
    if (!_indexTitles) {
        _indexTitles=[[NSMutableArray alloc]init];
    }
    return _indexTitles;
}

-(NSMutableDictionary *)groupListDic{
    if (!_groupListDic) {
        _groupListDic=[[NSMutableDictionary alloc]init];
    }
    return _groupListDic;
}

@end

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末家淤,一起剝皮案震驚了整個(gè)濱河市娃磺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辛块,死亡現(xiàn)場離奇詭異摘完,居然都是意外死亡沼头,警方通過查閱死者的電腦和手機(jī)移袍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門闷沥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咐容,你說我怎么就攤上這事÷煳” “怎么了戳粒?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長虫啥。 經(jīng)常有香客問我蔚约,道長,這世上最難降的妖魔是什么涂籽? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任苹祟,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘树枫。我一直安慰自己直焙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布砂轻。 她就那樣靜靜地躺著奔誓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搔涝。 梳的紋絲不亂的頭發(fā)上厨喂,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音庄呈,去河邊找鬼蜕煌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛诬留,可吹牛的內(nèi)容都是我干的斜纪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼故响,長吁一口氣:“原來是場噩夢啊……” “哼傀广!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起彩届,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤伪冰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后樟蠕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贮聂,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年寨辩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吓懈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡靡狞,死狀恐怖耻警,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情甸怕,我是刑警寧澤甘穿,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站梢杭,受9級(jí)特大地震影響温兼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜武契,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一募判、第九天 我趴在偏房一處隱蔽的房頂上張望荡含。 院中可真熱鬧,春花似錦届垫、人聲如沸释液。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽均澳。三九已至,卻和暖如春符衔,著一層夾襖步出監(jiān)牢的瞬間找前,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工判族, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躺盛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓形帮,卻偏偏與公主長得像槽惫,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辩撑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容