你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發-UI (八)TableView

iOS開發-UI (八)TableView

編輯:IOS開發綜合

知識點:

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;

}

 

【iOS開發-UI (八)TableView】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

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