iOS開發-UI (八)TableView,-uitableview

來源:互聯網
上載者:User

iOS開發-UI (八)TableView,-uitableview

知識點:

1.UITableView使用

2.UITableView分段功能

3.UITableViewCell重用機制

 

=======================

UITableView使用

    1.UITableView作用

    2.UITableView建立

    - (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style;

UITableViewStyle:

UITableViewStylePlain       列表模式

    UITableViewStyleGrouped       分組模式

// 執行個體化一個表格視圖

    //UITableViewStylePlain 列表模式

    //UITableViewStyleGrouped 分組模式

    

UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];    //設定代理    tableView.delegate = self;    tableView.dataSource = self;    [self.view addSubview:tableView];

 

 

    3.UITableView關聯資料(上面)

      1)tableView通過代理關聯資料

   

    4.NSIndexPath

      主要用來標識當前cell的在tableView中的位置

      該對象有section和row兩個屬性,

      前者標識當前cell處於第幾個section中

      後者代表在該section中的第幾行

 

    5.UITableViewCell介紹

      1)建立方式

       - (id)initWithStyle:(UITableViewCellStyle)style 

  reuseIdentifier:(NSString *)reuseIdentifier

//當某一個視圖控制器受到導航控制器管理的時候,如果在self.view之上添加的第一個子視圖是UIScrollView或者UIScrollView的子類,那麼這個對象的座標會自動往下位移64個單位

    //關閉此最佳化機制

    //self.automaticallyAdjustsScrollViewInsets = NO;

UITableViewCellStyle:

UITableViewCellStyleDefault

UITableViewCellStyleValue1

UITableViewCellStyleValue2

UITableViewCellStyleSubtitle

 

   UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

=======================

UITableView分段功能

   1.設定tableView的樣式

     UITableViewStyleGrouped

   2.設定代理

     1)設定段數:預設返回1

     - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

=======================

UITableView常用方法

UITableViewDataSource 

UITableViewDelegate

@interface RootViewController ()<UITableViewDelegate,UITableViewDataSource> #pragma mark- UITableViewDelegate&UITableViewDataSource//返回組數 (可選實現)-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{        return 2;}

 

//返回一組裡面有幾行(預設為1組)

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

   

    return 20;

}

//每一行都需要返回一個UITableViewCell類型的對象

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    //NSIndexPath 表格視圖中的座標組象

    // section->組

    // row->行

    

    

    //建立UITableViewCell類型的對象

    /*

     參數1:cell的類型

     參數2:複用標識

     */

    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

    

    //設定cell的標題為

    cell.textLabel.text = @"大家好";

    //設定圖片

    cell.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%03ld", indexPath.section * 20 + indexPath.row + 1]];

    

    return cell;

    

}

  1)設定行高

  - (CGFloat)tableView:(UITableView *)tableView 

       heightForRowAtIndexPath:(NSIndexPath *)indexPath

//設定行高-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    return 100;}

 

2)設定段頭標題

  - (NSString *)tableView:(UITableView *)tableView 

  titleForHeaderInSection:(NSInteger)section

//返回組頭標題-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{    return [NSString stringWithFormat:@"第%ld組組頭",section];}

 

3)設定段尾標題

  - (NSString *)tableView:(UITableView *)tableView 

  titleForFooterInSection:(NSInteger)section

//返回組尾標題-(NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section{    return @"我是組尾";}

 

4)刪除/插入一行(兩個一起用)

//編輯事件的回調方法-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{    if (editingStyle == UITableViewCellEditingStyleDelete) {        //刪除        //首先刪除資料來源        [self.dataArr removeObjectAtIndex:indexPath.row];        //重新整理UI        //reloadData 重新載入一遍資料        //[_tableView reloadData];        //帶動畫重新整理(刪除)        [_tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];    }else{        //插入        //首先在資料來源當中插入新資料        [self.dataArr insertObject:@"西安" atIndex:indexPath.row];        //重新整理UI        //[_tableView reloadData];        //帶動畫重新整理(插入)        [_tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];    }}//返回的編輯類型-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{    /*     UITableViewCellEditingStyleDelete //刪除     UITableViewCellEditingStyleInsert  //插入      */    //return UITableViewCellEditingStyleDelete;    return UITableViewCellEditingStyleInsert;}

 

 

5)定製刪除上面的文字

  - (NSString *)tableView:(UITableView *)tableView  titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath

 

//tableView調用

- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths 

      withRowAnimation:(UITableViewRowAnimation)animation;

- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths 

              withRowAnimation:(UITableViewRowAnimation)animation;

 

6)進入編輯和取消編輯模式

  @property(nonatomic,getter=isEditing) BOOL editing

 

7)如何讓指定行可以編輯

  - (BOOL)tableView:(UITableView *)tableView 

      canEditRowAtIndexPath:(NSIndexPath *)indexPath

  

 //是否允許編輯-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{    //第一行不允許編輯例子    /*    if (indexPath.row == 0) {        return NO;    }     */    return YES;}

 

8)如何做索引

  - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView

  //返回索引-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{    NSMutableArray *newArr = [NSMutableArray new];    //注意:索引的數量應該跟組數相等,如果索引的數量大於組數,則剩餘的索引將無效    for (char i  = 'A'; i <= 'Z'; i++) {        [newArr addObject:[NSString stringWithFormat:@"%c組",i]];    }    return newArr;}

 

9)如何跳轉到指定某一段某一行

  - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath 

        atScrollPosition:(UITableViewScrollPosition)scrollPosition 

        animated:(BOOL)animated;

 

10)如何移動一行  

  - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)

sourceIndexPath toIndexPath: (NSIndexPath *)destinationIndexPath{

//移動某一行-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath{    //sourceIndexPath 初始行數    //destinationIndexPath 目標行數  //儲存一份    id obj = self.dataArr[sourceIndexPath.row];    //刪除    [self.dataArr removeObjectAtIndex:sourceIndexPath.row];    //插入到目標位置    [self.dataArr insertObject:obj atIndex:destinationIndexPath.row];    for (NSString *str in self.dataArr) {        NSLog(@"str = %@",str);    }}

 

11)選中指定行

  - (void)tableView:(UITableView *)tableView 

    didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

//選中某一行

//didSelectRowAtIndexPath   正確

//didDeselectRowAtIndexPath 錯誤

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    NSLog(@"選中的行數為%ld",indexPath.row);    /*     UITableViewScrollPositionTop 移動某一行到螢幕的頂部     UITableViewScrollPositionMiddle 移動某一行到螢幕的中間     UITableViewScrollPositionBottom 移動某一行到螢幕的底部     */    [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];}

 

12)處理accessoryButton按下的事件

  - (void)tableView:(UITableView *)tableView

accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath

 

=======================

UITableViewCell複用機制

   

    1.cell重用方式

- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier; 

    2.複用的問題

第一次dequeue的時候可能還不存在該cell,所以需要判斷

如果隊列中沒有該cell的話,則需要alloc一個

#pragma mark- UITableViewDelegate&UITableViewDataSource//返回一組裡面有幾行(預設為1組)-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    return 20;}//每一行都需要返回一個UITableViewCell類型的對象-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    //在每一個UITableView當中,都會擁有一個複用隊列(數組),每當需要返回一個UITableViewCell類型的對象的時候,首先去複用隊列裡面尋找是否擁有相同類型的對象,如果有,就拿出來再次使用    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];    //如果複用隊列當中沒有找到,就建立新對象    if (cell == nil) {        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];    }    NSLog(@"修改前顯示的內容為%@",cell.textLabel.text);    //設定cell的標題為    cell.textLabel.text = [NSString stringWithFormat:@"%ld行",indexPath.row + 1];    NSLog(@"修改後顯示的內容為%@",cell.textLabel.text);    return cell;}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.