表視圖

UITableView

有兩種類型
1.平鋪型(Plain)
2.分組型(Grouped)
常用屬性:
id <UITableViewDataSource> dataSource:數(shù)據(jù)源代理
id <UITableViewDelegate> delegate:代理
separatorStyle:單元格線條顯示樣式
tableHeaderView:表視圖的頭部視圖
tableFooterView:表視圖尾部視圖

常用方法:

  • (instancetype)initWithFrame:(CGRect)frame
    style:(UITableViewStyle)style;
    //初始化并設置大小以及顯示的風格:平鋪型(Plain),分組型(Grouped)
  • (void)reloadData; 表格刷新
    (程序的刷新都要放在主線程中)

表視圖代理

UITableViewDataSource
數(shù)據(jù)源代理,為表視圖提供基本的數(shù)據(jù)配置。
UITableViewDelegate
為表視圖提供外觀以及行為配置

單元格
UITableViewCell
用于顯示每一個行上的數(shù)據(jù)(可以放label,button,image等)
常用屬性:
imageView 顯示圖片;
textLabel 文本標簽;
detailTextLabel 詳細文本標簽;
accessoryType 表格末端箭頭樣式;

//以下兩個必須實現(xiàn)的代理

//1.設置表視圖每個分區(qū)有多少行,(默認為一個分區(qū))
-(NSInteger )tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

//2.設置單元格內(nèi)容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

//以下方法可選實現(xiàn)
//3.設置表格分區(qū)個數(shù)
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

//4.設置單元格高度
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
//點擊單元格觸發(fā)事件
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
關鍵方法:
//添加頭部視圖
    _MyTableView.tableHeaderView = titleLab;
//添加尾部視圖
    _MyTableView.tableFooterView = footView;
#pragma mark -- 分區(qū)內(nèi)容設置
//設置分區(qū)頭的高度,不要設置0,設置0 會為默認值
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
//設置分區(qū)尾的高度,不要設置0,設置0 會為默認值
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
//設置分區(qū)頭標題內(nèi)容
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
//設置分區(qū)尾標題內(nèi)容
-(NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;
//自定義頭尾分區(qū)視圖
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
//自定義尾部分區(qū)視圖
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;

單元格重用機制

UITableView中的cell可以有很多,一般會通過重用cell來達到節(jié)省內(nèi)存的目的:通過為每個cell指定一個重用標識符(reuseIdentifier),即指定了單元格的種類,當cell滾出屏幕時,會將滾出屏幕的單元格放入重用的queue中,當某個未在屏幕上的單元格要顯示的時候,就從這個queue中取出單元格進行重用
重用機制調(diào)用的就是dequeueReusableCellWithIdentifier這個方法,方法的意思就是“出列可重用的cell”

如何重用

1.設置單元格重用標識;
2.從重用隊列根據(jù)標識取出可以重用的單元格
3.判斷可以重用的單元是否存在,如果不存在,則創(chuàng)建一個單元格,并且添加重用標識

添加單元格

-(void)insertRowsAtIndexPaths:(NSArray *)indexPaths
withRowAnimation:(UITableViewRowAnimation)animation;  //根據(jù)下標插入  一個單元格

刪除單元格

-(void)deleteRowsAtIndexPaths:(NSArray *)indexPaths
withRowAnimation:(UITableViewRowAnimation)animation; :根據(jù)下標刪除    一個單元格

直接在控制器上自定義cell
1、創(chuàng)建表格,并設置代理,實現(xiàn)代理必須實現(xiàn)方法;
2、單元格定制方法中
2-1:創(chuàng)建一個靜態(tài)標識
2-2:從重用隊列中獲取單元格
2-3:判斷是否有重用單元格,如果沒有則創(chuàng)建單元格,并且在單元格上添加自定義控件;
2-4:通過tag 標識取出單元格上控件,并進行賦值

此種方式:要注意的是,定制的內(nèi)容,要寫在判斷重用的括號中,并且給自定義的每個控件設置不同的標識tag,然后再括號外,通過tag 值獲取控件,并進行賦值;
用這種方式的缺點是:控制上代碼量多,容易造成代碼冗余,接而引出自定類的方式。

封裝cell類自定義cell

1、創(chuàng)建表格,并設置代理,實現(xiàn)代理必須實現(xiàn)方法;
2、創(chuàng)建一個自定義cell類,繼承于UITableViewCell;
3、在自定義類中重寫-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 方法,并在方法中定制自定義控件,添加到單元格上;
4、在控制器中,導入自定義cell類。
5、在單元格定制方法中,生成自定義cell,并進行賦值

Xib方式自定義cell

1、創(chuàng)建一個空的Nib文件,命名為Custom.xib
2、從objectLibrary 中拖一個TableViewCell
3、在cell 上拖UIImageView、UILable 并設置tag 值
4、在定制單元格方法中,獲取cell ,并使用

單選實現(xiàn)步奏

  1. 在AppDelegate.m中包含ViewController.h頭文件,創(chuàng)建ViewController對象(vc),接著創(chuàng)建一個UINavigationController對象(nVC)將vc設置為自己的根視圖,最后設置self.window.rootViewController為nVC。
  2. 在ViewController.m中創(chuàng)建一個全局的可變數(shù)組,并往里面添加表格需要的數(shù)據(jù)字典對象。
  3. 創(chuàng)建一個類名叫QQListView繼承UIView,在QQListView.h中聲明初始化方法,在QQListView.m中實現(xiàn)重寫的初始化方法。
  4. 創(chuàng)建一個類名叫ListTableViewCell繼承UITableViewCell,在ListTableViewCell.h中聲明單元格的各個控件變量,在ListTableViewCell.m中實現(xiàn)重寫的初始化方法。
  5. 在QQListView.m中實現(xiàn)表格的代理方法,并包含ListTableViewCell.h,用ListTableViewCell類創(chuàng)建cell對象。
  6. 在ViewController.m中包含QQListView.h頭文件,并創(chuàng)建QQListView的對象,添加到self.view上。
  7. 在ListTableViewCell.h中聲明設置單元格數(shù)據(jù)的方法,在ListTableViewCell.m中實現(xiàn)數(shù)據(jù)顯示方法。
  8. 在ListTableViewCell.m中實現(xiàn)點擊單元格觸發(fā)的代理方法完成單選功能。

多選實現(xiàn)原理

1、為要顯示的數(shù)據(jù)創(chuàng)建模型類,并在該類中添加一個布爾型的標志位
2、uitableView 的 cellForRowAtIndexPath: 方法中,判斷當前要顯示的數(shù)據(jù)的標志位是否是YES ,若是,將當期的單元格的 accessoryType 屬性改為 UITableViewCellAccessoryCheckmark 若不是 將其改為UITableViewCellAccessoryNone
3、若選中某行時,更改相應的數(shù)據(jù)的標志位的值,并刷新此行;

多選實現(xiàn)步奏

  1. 在AppDelegate.m中包含ViewController.h頭文件,創(chuàng)建ViewController對象(vc),接著創(chuàng)建一個UINavigationController對象(nVC)將vc設置為自己的根視圖,最后設置self.window.rootViewController為nVC。
  2. 在ViewController.m中創(chuàng)建一個全局的可變數(shù)組,并往里面添加表格需要的數(shù)據(jù)字典對象。
  3. 創(chuàng)建一個類名叫GoodsListView繼承UIView,在GoodsListView.h中聲明初始化方法,在GoodsListView.m中實現(xiàn)重寫的初始化方法。
  4. 創(chuàng)建一個類名為DrawLableLine,繼承UILable。
  5. 創(chuàng)建一個類名叫ListTableViewCell繼承UITableViewCell,在ListTableViewCell.h中包含DrawLableLine.h,并聲明單元格的各個控件變量,其中原價格的lable是DrawLableLine類型,在ListTableViewCell.m中實現(xiàn)重寫的初始化方法。
    . 在GoodsListView.m中實現(xiàn)表格的代理方法,并包含ListTableViewCell.h,用ListTableViewCell類創(chuàng)建cell對象。
  6. 在ViewController.m中包含GoodsListView.h頭文件,并創(chuàng)建GoodsListView的對象,添加到self.view上。
  7. 在ListTableViewCell.h中聲明設置單元格數(shù)據(jù)的方法,在ListTableViewCell.m中實現(xiàn)數(shù)據(jù)顯示方法及價格劃線方法。
  8. 在ListTableViewCell.m中實現(xiàn)點擊按鈕完成復選及修改商品數(shù)量的功能。

一.單選原理

1、為要顯示的數(shù)據(jù)創(chuàng)建模型類,并在該類中添加一個布爾型的標志位
2、uitableView 的 cellForRowAtIndexPath: 方法中,判斷當前要顯示的數(shù)據(jù)的標志位是否是YES ,若是,將當期的單元格的 accessoryType 屬性改為 UITableViewCellAccessoryCheckmark 若不是 將其改為UITableViewCellAccessoryNone
3、若選中某行時,更改相應的數(shù)據(jù)的標志位的值,并且刷新有關的兩行;

二:多選實現(xiàn)原理

1、為要顯示的數(shù)據(jù)創(chuàng)建模型類,并在該類中添加一個布爾型的標志位
2、uitableView 的 cellForRowAtIndexPath: 方法中,判斷當前要顯示的數(shù)據(jù)的標志位是否是YES ,若是,將當期的單元格的 accessoryType 屬性改為 UITableViewCellAccessoryCheckmark 若不是 將其改為UITableViewCellAccessoryNone
3、若選中某行時,更改相應的數(shù)據(jù)的標志位的值,并刷新此行;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容