IOS UITableView分組顯示資料列表教程

來源:互聯網
上載者:User

UITableView有兩種風格:UITableViewStylePlain和UITableViewStyleGrouped。這兩者操作起來其實並沒有本質區別,只是後者按分組樣式顯示前者按照普通樣式顯示而已。今天我們就看看分組的使用:



1、首先我們介紹一下分組的tableView,初始化一個tableView如下

#pragma mark - 載入表視圖

- (void) loadTableView{          _tableView=[[UITableView alloc] initWithFrame:CGRectMake(0,20, kWidth, kHeight) style:UITableViewStyleGrouped];        //設定代理    _tableView.delegate=self;    _tableView.dataSource=self;        //設定行高    _tableView.rowHeight=60;    //隱藏分組腳的高度    _tableView.sectionFooterHeight=0;    [self.view addSubview:_tableView];}



2、載入資料,分組資料我們已經在plist檔案中定義,載入代碼如下:


#pragma mark - 載入資料- (void)loadData{        NSString * path=[[NSBundle mainBundle] pathForResource:@"friends.plist" ofType:nil];    _array=[NSArray arrayWithContentsOfFile:path];    }




3、初始化代理方法


#pragma mark - 設定分組的個數- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView{    return _array.count;}#pragma mark - 設定分組的高度- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{    return 40;}#pragma mark - 自訂分組頭- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{           NSDictionary *dic=_array[section];    NSString * title=dic[@"group"];    //1 自訂頭部    UIView * view=[[UIView alloc] init];     view.backgroundColor=[UIColor grayColor];    view.layer.borderWidth=1;    view.layer.borderColor=[UIColor whiteColor].CGColor;        // 2 增加按鈕    UIButton * button=[UIButton buttonWithType:UIButtonTypeCustom];    [button setTitle:title forState:UIControlStateNormal];    button.frame=CGRectMake(0, 0, kWidth, 40);    button.tag=section;    [button addTarget:self action:@selector(clickTheGroup:) forControlEvents:UIControlEventTouchUpInside];    [view addSubview:button];        //3 添加左邊的箭頭    UIImageView * imageView=[[UIImageView alloc] initWithFrame:CGRectMake(5, 40/2.0-30/2.0, 30, 30)];    imageView.image=[UIImage imageNamed:@"disclosure.png"];    imageView.tag=101;    [button addSubview:imageView];    [_headImageView setObject:imageView forKey:@(section)];    return view;}#pragma mark - UITableViewDataSource- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{             return 0;    }





效果圖如下:


  4、我們就可以點擊某個分組進行重新整理資料了,通過控制當前分組中資料的個數來達到該效果,由於當前的分組狀態有兩個關閉和開啟,因此我們需要定義一個字典來控制狀態,該字典的key為當前分組的索引,值為1 的時候為開啟,值為2的時候為關閉。每次點擊的時候我們需要給當前的狀態重新初始化,目前狀態改變的時候對應的分組包含的資料條數置為0


- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{        int flag=[_state[@(section)] intValue];    NSDictionary *dic=_array[section];    NSArray * friends=dic[@"friends"];    if(flag){        return friends.count;    }else{        return 0;    }   }




5、重新整理需要控制三角號表徵圖的旋轉,因此我們需要通過動畫,完成當前效果

#pragma mark - 點擊分組資訊- (void) clickTheGroup:(UIButton * ) button{    int groupIndex=(int)button.tag;    int flag=0;//用來控制重新執行個體化按鈕        if([_state[@(groupIndex)] intValue]==0){        [_state setObject:@(1) forKey:@(groupIndex)];        flag=0;    }else{        [_state setObject:@(0) forKey:@(groupIndex)];        flag=1;           }     //重新整理當前的分組    NSIndexSet * set=[[NSIndexSet alloc] initWithIndex:groupIndex];        [_tableView reloadSections:set withRowAnimation:UITableViewRowAnimationNone];        UIImageView * imageView=_headImageView[@(groupIndex)];        //類比動畫,每次都重新重新整理了因此仿射變化恢複到原始狀態了    if(flag){        imageView.transform=CGAffineTransformRotate(imageView.transform, M_PI_2);    }        [UIView animateWithDuration:0.3 animations:^{                if(flag==0){            imageView.transform=CGAffineTransformMakeRotation( M_PI_2);        }else{            imageView.transform=CGAffineTransformMakeRotation(0);        }    }];   }




完成後效果如下:

動畫瞬間效果



ios 自訂UITableView中分組的標題sectionview

//section的標題列高度-(cgfloat)tableview:(uitableview *)tableview heightforheaderinsection:(nsinteger)section{    if (section == 0)        return 46;    else        return 30.0f;}  -(uiview *)tableview:(uitableview *)tableview viewforheaderinsection:(nsinteger)section{    cgrect headerframe = cgrectmake(0, 0, 300, 30);    cgfloat y = 2;    if (section == 0) {        headerframe = cgrectmake(0, 0, 300, 100);        y = 18;    }    uiview *headerview = [[uiview alloc] initwithframe:headerframe];    uilabel *datelabel=[[uilabel alloc] initwithframe:cgrectmake(20, y, 240, 24)];//日期標籤    datelabel.font=[uifont boldsystemfontofsize:16.0f];    datelabel.textcolor = [uicolor darkgraycolor];    datelabel.backgroundcolor=[uicolor clearcolor];    uilabel *agelabel=[[uilabel alloc] initwithframe:cgrectmake(216, y, 88, 24)];//年齡標籤    agelabel.font=[uifont systemfontofsize:14.0];    agelabel.textalignment=uitextalignmentright;    agelabel.textcolor = [uicolor darkgraycolor];    agelabel.backgroundcolor=[uicolor clearcolor];         nsdateformatter *dateformatter = [[nsdateformatter alloc] init];    dateformatter.dateformat = @"mm dd,yyyy";    datelabel.text = [nsstring stringwithformat:@"%@",[dateformatter stringfromdate:[nsdate date]]];    agelabel.text = @"1歲 2天";         [headerview addsubview:datelabel];    [headerview addsubview:agelabel];    return headerview;}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.