你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> iOS TableView實現QQ好友列表(三)

iOS TableView實現QQ好友列表(三)

編輯:關於IOS

接下來我們將分組點擊的時候折疊起來。

首先新建一個可變字典用來存儲當前列表是否展示

  1. NSMutableArray *selectedArr;//控制列表是否被打開

 

  1. selectedArr=[[NSMutableArray alloc]init];

 

根據前兩節所講,我們講分組名稱放在section的header上了,但是Header 不像cell一樣有點擊方法

此時我們可以考慮給header上添加一個button來實現點擊的時候打開列表和關閉列表

  1. -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
  2. {
  3.     UIView *view=[[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 30)];
  4.     view.backgroundColor=[UIColor whiteColor];
  5.     UILabel *titleLabel=[[UILabel alloc]initWithFrame:CGRectMake(30, 5, SCREEN_WIDTH, 30)];
  6.     titleLabel.text=[titleArray objectAtIndex:section];
  7.     [view addSubview:titleLabel];
  8.     UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(5, 5, 20, 20)];
  9.     imageView.tag=20000+section;
  10.     imageView.image=[UIImage imageNamed:@"arrow_down.png"];
  11.     [view addSubview:imageView];
  12.     //添加一個button 用來監聽點擊分組,實現分組的展開關閉。
  13.     UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
  14.     btn.frame=CGRectMake(0, 0, SCREEN_WIDTH, 50);
  15.     btn.tag=10000+section;
  16.     [btn addTarget:self action:@selector(btnOpenList:) forControlEvents:UIControlEventTouchDown];
  17.     return view;
  18. }

此處設置button的tag為10000+section  是為了 保證通過button 的 tag 識別出當前點擊的是哪個分組(沒有直接設置成section 而是設置為10000+section  是為了保證左側的圖片也能通過tag確定是哪個分組的,所以他的tag被設置為 20000+section  這樣就保證了 section不超過10000的時候兩個都可以通過tag確定,而且不相互影響)

實現剛才添加的button的方法

  1. -(void)btnOpenList:(UIButton *)sender
  2. {
  3.     NSString *string = [NSString stringWithFormat:@"%d",sender.tag-10000];
  4.     //數組selectedArr裡面存的數據和表頭想對應,方便以後做比較
  5.     if ([selectedArr containsObject:string])
  6.     {
  7.         [selectedArr removeObject:string];
  8.     }
  9.     else
  10.     {
  11.         [selectedArr addObject:string];
  12.     }
  13.     [tableViewList reloadData];
  14. }

上邊的方法是在點擊了分組之後跟新一下 selectedArr數組,

下來我們就實現table跟新的時候  讀取selectedArr 決定是否展開分組

  1. -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  2. {
  3.     NSString *indexStr = [NSString stringWithFormat:@"%d",indexPath.section];
  4.     NSString *str=[titleArray objectAtIndex:indexPath.section];
  5.     NSArray *arr=[dataDic objectForKey:str];
  6.     static NSString *CellIdentifier = @"UserCell";
  7.     UserTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  8.     cell=nil;
  9.     if (cell == nil) {
  10.         cell = [[UserTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
  11.         cell.selectionStyle = UITableViewCellSelectionStyleGray;
  12.     }
  13.     //只需要給當前分組展開的section 添加用戶信息即可
  14.     if ([selectedArr containsObject:indexStr]) {
  15.         NSDictionary *dic=[arr objectAtIndex:indexPath.row];
  16.         cell.headerphoto.image=[UIImage imageNamed:[dic valueForKey:@"usericon"]];
  17.         cell.nameLabel.text=[dic valueForKey:@"name"];
  18.         cell.isOnLine.text=@"[在線]";
  19.         cell.introductionLabel.text=@"無動態";
  20.         cell.networkLabel.text=@"4G";
  21.     }
  22.     return cell;
  23. }

到此位置 展開關閉可以了 但是左側的剪頭還沒有變換過來(展開的時候為向下的剪頭,關閉時為超有的剪頭)
iOS TableView實現QQ好友列表(三)

此時 我們需要調整方法

  1. -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
  2. {
  3.     UIView *view=[[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 30)];
  4.     view.backgroundColor=[UIColor whiteColor];
  5.     UILabel *titleLabel=[[UILabel alloc]initWithFrame:CGRectMake(30, 5, SCREEN_WIDTH, 30)];
  6.     titleLabel.text=[titleArray objectAtIndex:section];
  7.     [view addSubview:titleLabel];
  8.     UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(5, 5, 20, 20)];
  9.     imageView.tag=20000+section;
  10.     //更具當前是否展開設置圖片
  11.     NSString *string = [NSString stringWithFormat:@"%d",section];
  12.     if ([selectedArr containsObject:string]) {
  13.         imageView.image=[UIImage imageNamed:@"arrow_down.png"];
  14.     }else{
  15.         imageView.image=[UIImage imageNamed:@"arrow_right.png"];
  16.     }
  17.     [view addSubview:imageView];
  18.     //添加一個button 用來監聽點擊分組,實現分組的展開關閉。
  19.     UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
  20.     btn.frame=CGRectMake(0, 0, SCREEN_WIDTH, 50);
  21.     btn.tag=10000+section;
  22.     [btn addTarget:self action:@selector(btnOpenList:) forControlEvents:UIControlEventTouchDown];
  23.     [view addSubview:btn];
  24.     return view;
  25. }

 

最終效果如下

到此為止基本上完成了 模仿qq好友列表的簡單功能。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved