最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS開發(fā)之UITableView詳解

 更新時間:2016年04月13日 10:11:44   作者:執(zhí)著丶執(zhí)念  
在iOS開發(fā)中UITableView可以說是使用最廣泛的控件,我們平時使用的軟件中到處都可以看到它的影子,類似于微信、QQ、新浪微博等軟件基本上隨處都是UITableView。當然它的廣泛使用自然離不開它強大的功能,今天這篇文章將針對UITableView重點展開討論

一、UITableView基本介紹

默認的UITableView有2種風格:

  1. UITableViewStylePlain(不分組)
  2. UITableViewStyleGrouped(分組)

UITableView中的數(shù)據(jù)只有行的概念,沒有列的概念,UITableView的每行數(shù)據(jù)就是一個UITableViewCell。
自帶的UITableViewCell的類型選擇有:

復(fù)制代碼 代碼如下:

typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
    UITableViewCellStyleDefault,    // 左側(cè)顯示textLabel(不顯示detailTextLabel),imageView可選(顯示在最左邊)
    UITableViewCellStyleValue1,     // 左側(cè)顯示textLabel、右側(cè)顯示detailTextLabel(默認藍色),imageView可選(顯示在最左邊)
    UITableViewCellStyleValue2,     // 左側(cè)依次顯示textLabel(默認藍色)和detailTextLabel,imageView可選(顯示在最左邊)
    UITableViewCellStyleSubtitle    // 左上方顯示textLabel,左下方顯示detailTextLabel(默認灰色),imageView可選(顯示在最左邊)
};

二、UITableViewDataSource數(shù)據(jù)源

數(shù)據(jù)源的作用就是告訴UITableView,我該顯示什么數(shù)據(jù)

復(fù)制代碼 代碼如下:

#pragma mark 常用數(shù)據(jù)源方法
#pragma mark 返回分組數(shù)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
#pragma mark 返回每組行數(shù)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
#pragma mark 返回每行的單元格
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark 返回每組頭標題名稱
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
#pragma mark 返回每組尾部說明
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section

計算分組數(shù) -> 計算每組行數(shù) -> 生成分組索引 -> 生成單元格
注意:cellForRowAtIndexPath只生產(chǎn)當前顯示在界面上的單元格

三、UITableViewDelegate代理

代理的作用是告訴UITableView,我該怎么顯示和響應(yīng)

復(fù)制代碼 代碼如下:

#pragma mark - 常用代理方法
#pragma mark 設(shè)置分組頭部的內(nèi)容高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
#pragma mark 設(shè)置每行高度(每行高度可以不一樣)
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark 設(shè)置分組尾部的內(nèi)容高度
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
#pragma mark 點擊了某一行
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark 設(shè)置分組的頭部視圖
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
#pragma mark 設(shè)置分組的尾部視圖
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;

四、UITableView刷新列表方法

復(fù)制代碼 代碼如下:

#pragma mark 刷新整個表格
- (void)reloadData;
#pragma mark 刷新指定的行
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
#pragma mark 刷新指定的分組
- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;
#pragma mark 刪除時刷新指定的行數(shù)據(jù)
- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
#pragma mark 添加時刷新指定的行數(shù)據(jù)
- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

五、UITableViewCell的重用機制

在UITableView內(nèi)部有一個緩存池,專門用來緩存UITableViewCell,因為UITableView不是一下子顯示全部Cell,而是以 所見即所得 的方式,手機上看的見的Cell,才有存在的對象UITableViewCell實例。具體表現(xiàn)如下:

每次顯示新的Cell的時候,都是先從緩存池中取出對應(yīng)的UITableViewCell對象,進行 重新初始化 顯示。如果緩存池中沒有,才創(chuàng)建新的UITableViewCell對象
每當某個Cell被移出 可見區(qū)域 外后,就會被 回收 到緩存池中
所以盡管要展示的數(shù)據(jù)巨大,但內(nèi)存中存在的UITableViewCell也是有限的,極大的降低了對內(nèi)存的需求。

復(fù)制代碼 代碼如下:

# pragma mark 在tableView:cellForRowAtIndexPath:方法中使用UITableView的重用機制
// 由于此方法調(diào)用十分頻繁,cell的標示聲明成靜態(tài)變量有利于性能優(yōu)化
static NSString *cellIdentifier = @"UITableViewCellIdentifierKey1";
// 首先根據(jù)標識去緩存池取
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
// 如果緩存池沒有找到,則重新創(chuàng)建并放到緩存池中
if(!cell){
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];
}

六、系統(tǒng)自帶的UITableViewCell

我們基本上很少使用系統(tǒng)自帶的UITableViewCell,樣式太過于死板了。

七、自定義Cell

基本步驟:
自定義類XXXTableViewCell,繼承UITableViewCell
重寫-(id)initWithStyle:reuseIdentifier:方法,添加子控件
最好重寫layoutSubView方法,設(shè)置子控件frame
然后在UITableView的代理方法tableView:cellForRowAtIndexPath:中使用重用機制創(chuàng)建該類XXXTableViewCell,再對cell進行初始化

八、MVC模式

 

相關(guān)文章

  • iOS開發(fā)之UIScrollView控件詳解

    iOS開發(fā)之UIScrollView控件詳解

    UIScrollView是一個非常重要的控件,其可以展示比設(shè)備屏幕更大區(qū)域的內(nèi)容,我們可以通過手指滑動來查看內(nèi)容視圖的每一部分內(nèi)容,也可以通過手指捏合來對內(nèi)容視圖進行縮放操作,我們每天開發(fā)中都不斷顯式或隱式地與UIScrollView打交道,下面給大家詳細介紹UIScrollView控件。
    2016-09-09
  • IOS  開發(fā)獲取本地圖片路徑及上傳

    IOS 開發(fā)獲取本地圖片路徑及上傳

    這篇文章主要介紹了IOS 開發(fā)獲取本地圖片路徑及上傳的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • ios實現(xiàn)tableView頂部彈簧圖片效果

    ios實現(xiàn)tableView頂部彈簧圖片效果

    這篇文章主要為大家詳細介紹了ios實現(xiàn)tableView頂部彈簧圖片效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 百度地圖PC端判斷用戶是否在配送范圍內(nèi)

    百度地圖PC端判斷用戶是否在配送范圍內(nèi)

    在pc端設(shè)置商家的配送范圍,用戶在下單時,根據(jù)用戶設(shè)置的配送地點判斷是否在可配送范圍內(nèi),并給用戶相應(yīng)的提示,下面通過本文給大家分享具有實現(xiàn)代碼,感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • IOS 性能優(yōu)化中離屏渲染

    IOS 性能優(yōu)化中離屏渲染

    本文主要介紹了IOS 性能優(yōu)化中離屏渲染的資料,提供了幾種方法講解了優(yōu)化,有需要的小伙伴可以參考下
    2016-10-10
  • 解析iOS內(nèi)存不足時的警告以及處理過程

    解析iOS內(nèi)存不足時的警告以及處理過程

    這篇文章主要介紹了iOS內(nèi)存不足時的警告以及處理過程,包括View Controller和生命周期等相關(guān)方面的知識,需要的朋友可以參考下
    2015-10-10
  • iOS中利用inputView 彈出 picker

    iOS中利用inputView 彈出 picker

    這篇文章主要介紹了iOS中利用inputView 彈出 picker的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • iOS仿熱門話題熱點輪播界面tableView

    iOS仿熱門話題熱點輪播界面tableView

    這篇文章主要為大家詳細介紹了iOS仿熱門話題熱點輪播界面tableView,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • IOS 聊天界面(自適應(yīng)文字)的實現(xiàn)

    IOS 聊天界面(自適應(yīng)文字)的實現(xiàn)

    本文主要介紹一個實現(xiàn)聊天界面的思路過程,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • IOS實現(xiàn)上滑隱藏NvaigtionBar而下拉則顯示效果

    IOS實現(xiàn)上滑隱藏NvaigtionBar而下拉則顯示效果

    這篇文章給大家介紹了如何實現(xiàn)APP上滑時隱藏navigationBar而下拉則又會顯示,雖然也是隱藏但是效果和其他完全不一樣,因為以前沒做過所以試著去實現(xiàn)一下,現(xiàn)在分享給大家,有需要的可以參考借鑒。
    2016-09-09

最新評論

秀山| 修文县| 马公市| 临夏市| 桓台县| 夏河县| 马边| 怀安县| 丽江市| 石河子市| 东平县| 保山市| 中卫市| 六安市| 丰县| 二连浩特市| 保亭| 张家川| 临夏县| 韶山市| 友谊县| 义马市| 新津县| 阜城县| 珲春市| 闽清县| 长乐市| 体育| 开平市| 普宁市| 监利县| 铜陵市| 酒泉市| 云安县| 陇西县| 满洲里市| 辽阳县| 温宿县| 尚志市| 全州县| 荔波县|