1. 程式人生 > >iOS開發學習總結——UITableView使用初步

iOS開發學習總結——UITableView使用初步

一、UITableView概述

UITableView是iOS開發中最常用的控制元件之一,大多數應用程式中使用UITableView作為列表來展示內容。UITableViewController中包含了一個UITableView,它和UIViewController的區別還不是很清楚,目前只知道UITableViewController是從UIViewController繼承而來。還請大神指點。

UITableView的屬性常用的有兩個,一個是它的Content,Dynamic Prototypes是可以滾動的可重用的列表,而Static Cells是靜態的列表。還有一個屬性是Style,可以選擇Plain(類似於通訊錄的樣式,用於顯示搜尋結果等)和Grouped(類似與系統設定的樣式,用於顯示選單等)。還有關於分割線的一些屬性。

二、UITableViewCell和NSIndexPath

UITableViewCell對應的是單元格,在Dynamic Prototypes模式下,UITableViewCell是要求可以重用的,所以在這種情況下不能用@IBOutlet將變數和檢視中的Cell進行關聯。在Static Cells模式下應該可以,不過用的比較多的還是Dynamic Prototypes模式。

UITableViewCell包含了一個Title和一個Details,分別對應單元格的主標題和說明,二者都是UITextLabel*型別,還包括了一個位於左側的imageView和位於右側的accessoryView,型別分別為UIImageView和UIView,左側可放入影象,右側可以放入任意的控制元件(開關,選擇框等)。

在UITableViewCell的構造方法中,需要指明Style和reuseIdentifier(重用識別符號)。

NSIndexPath是一個類似於二維陣列的型別,其中成員section是確定了單元格所在的分組,而成員row是確定了單元格在所在分組中的位置,主要用於cellForRowAtIndexPath:和didSelectRowAtIndexPath:這兩個方法。

三、UITableView的資料來源協議(UITableViewDataSource)

UITableViewDataSource是UITableView的一個協議,其中包含了關於UITableView的佈局、資料來源等方面的一些方法,常用的有如下幾個:

指定列表中分組的個數

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

指定每個分組的標題(section引數代表分組號)

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

指定每個分組的說明(section引數代表分組號)

- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section

指定每個分組中單元格的個數(section引數代表分組號)

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

載入每個單元格的時候都會呼叫的方法

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

點選每個單元格的時候都會呼叫的方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(nonnull NSIndexPath *)indexPath

其中cellForRowAtIndexPath:方法使用的及其頻繁,為了提高執行效率,需要對UITableViewCell進行重用,在使用者把某個單元格滑動出界面的時候,iOS會自動將該單元格放入快取中。所以我們想要重用的話只需要嘗試從快取中取出單元格即可,一般情況下只需要編寫如下程式碼:

NSString *[email protected]"UITableViewCellIdentifier";      //重用標誌
    UITableViewCell *cell=[_settingsTableView dequeueReusableCellWithIdentifier:(identifier)];
    //先嚐試從快取池中取出已經載入的單元格
    if(cell==nil) {
        cell=[[UITableViewCell alloc]initWithStyle:(UITableViewCellStyleSubtitle) reuseIdentifier:(identifier)];
        //如果快取池中不存在該單元格,則載入該單元格
    }

其中第一個NSString*是一個重用識別符號,dequeueReusableCellWithIdentifier:方法會首先嚐試從快取池中取出已載入的單元格,如果沒有取出,則返回nil。再用if語句判斷是否成功取出,如果未取出則需要建立這個單元格(否則會出現空指標異常),建立一個單元格用到的方法是initWithStyle:reuseIdentifier:,其中reuseIdentifier就是之前定義的重用識別符號。同時還經常使用下面的方法setSelectionStyle:(UITableViewCellSelectionStyle),其中可以傳入引數UITableViewCellSelectionStyleNone,作用是禁止點選該單元格,預設情況下單元格是可以被點選的。還有可以設定是否允許重新排列和是否允許刪除單元格的方法,預設值都是不允許。

在呼叫didSelectRowAtIndexPath:方法時,只需要根據不同的單元格進行不同的操作即可,其中經常使用的方法是:deselectRowAtIndexPath:(indexPath) animated:(YES),此方法可以使點選產生的高亮條立即消失,不然的話單元格會一直亮著,好像卡住了一樣,影響使用者體驗。


相關推薦

iOS開發學習總結——UITableView使用初步

一、UITableView概述 UITableView是iOS開發中最常用的控制元件之一,大多數應用程式中使用UITableView作為列表來展示內容。UITableViewController中包

IOS開發學習筆記十六 使用UITableView控制元件實現微博列表效果

效果:專案地址 微博列表唯一需要注意的是每個條目的列表行高不一致,需要在UITableView的代理方法heightForRowAtIndexPath中動態設定行高 需要建立Module物件CZMicroBlogFrame來儲存UITableCell的子View的

IOS開發學習筆記十五 為UITableView控制元件新增Header和Footer

效果圖:專案地址 新增圖片素材,新增plist檔案,新增名為CZGoods的module檔案 @implementation CZGoods - (instancetype)initWithDict:(NSDictionary *)dict { if

IOS開發學習筆記十四 UITableView控制元件實現ListView的效果

效果圖:專案地址 ViewController對應的程式碼: #import "ViewController.h" #import "CZHero.h" @interface ViewController () <UITableViewDataSource, UIT

多年iOS開發經驗總結

pla tostring 技術 draw zed 權限 provide cst gre 1、禁止手機睡眠 [UIApplication sharedApplication].idleTimerDisabled = YES; 2、隱藏某行cell - (CG

iOS開發經驗總結

圓形 service selector prot 區域 location dsi layout tty 1、設置UILabel行間距 NSMutableAttributedString* attrString = [[NSMutableAttributedString

OpenSSL開發學習總結

web 分解 iam 模塊 關閉 odi 選項 swp gda from https://mp.weixin.qq.com/s/sJBGJ88_-N-LdA8EHywfAA 1.對稱加密算法 對稱加密算法只使用一個密鑰。數據的發送方準備好原始數據和一個加密密鑰,

SpringCloud開發學習總結(六)—— 結合註解的AOP示例

分析 urn 需要 開發 tostring ole ngs artifact tex   面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是OOP的延續,是軟件開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生

SpringCloud開發學習總結(四)—— 客戶端負載均衡Ribbon

均衡 spring java www ref discovery 聯合 方式 嘗試   通過上一章《SpringCloud開發學習總結(三)—— 服務治理Eureka》,我們已經搭建起微服務架構中的核心組件——服務註冊中心(包括單點模式和高可用模式)。同時還註冊了一個服務,

iOS開發UI篇—UITableview控件基本使用

ade scl table itl 示例 spa ces LEDE file iOS開發UI篇—UITableview控件基本使用 一、一個簡單的英雄展示程序 NJHero.h文件代碼(字典轉模型) #import <Foundation/Foundation.h

iOS開發UI篇—UITableview控件簡單介紹

object des car 頭部 cell 簡單 過程 ios nta iOS開發UI篇—UITableview控件簡單介紹 一、基本介紹 在眾多移動應?用中,能看到各式各樣的表格數據 。 在iOS中,要實現表格數據展示,最常用的做法就是使用UITableView

多年iOS開發經驗總結(轉)

1、設定UILabel行間距 NSMutableAttributedString* attrString = [[NSMutableAttributedString  alloc] initWithString:label.text];

IOS開發學習筆記十三 UIScrollView控制元件實現輪播圖

效果圖:專案地址 程式碼: #import "ViewController.h" @interface ViewController ()<UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet

IOS開發學習筆記十二 實現一個簡單的答題器

效果圖:專案地址 專案新增素材,新增plist檔案,並新增plist裡面的字典資料對應的model物件 module標頭檔案: #import <Foundation/Foundation.h> @interface CZQuestion :

IOS開發學習筆記十一 使用xlib檔案實現GridView的效果

效果圖: 在專案中資源素材檔案 新增plist檔案 新增名叫AFGridItem的model物件,用來代替我們從plist檔案中解析得到的字典資料,並新增通過字典獲取物件例項和初始化物件的方法。 #import <Foundation/Foun

IOS開發學習筆記十 使用程式碼實現GridView的效果

效果圖:專案地址 把圖片素材放入專案中,併為專案建立plist檔案,存放一個字典陣列,每個字典裡面對應存放這圖片素材名稱和GridView子條目的對應的文字描述。 新增NSArray *app的變數,使用懶載入的方式來讀取並儲存plist檔案的內容 在Vie

IOS開發學習筆記九 湯姆貓和幀動畫

首先是效果圖:demo下載 首先把所有需要用到的幀動畫素材新增到專案中,然後是把這些幀動畫素材新增到NSMutableArray中,為ImageView設定animationImages屬性,具體程式碼如下: #import "ViewController.h

IOS開發學習筆記八 圖片瀏覽器

首先是效果圖:demo下載 把圖片素材放入Assets.xcassets 建立plist檔案(本質是xml檔案) 介面的搭建,按照頁面佈局拖拽新增控制元件 ViewController具體程式碼

IOS開發學習筆記七 使用程式碼為介面新增控制元件

首先是要實現的效果圖:demo下載 我們用程式碼在介面上建立了一個button,有預設圖片背景和高亮圖片背景兩種狀態。 具體實現程式碼: 主要是在介面對應的ViewController類初始化的時候,來通過程式碼建立按鈕。 #import "ViewControll

ios開發學習c語言第一天 2018-11-13

程式編譯過程 1.編寫程式碼 (1)找到一個整合開發環境作為我們的開發工具,例如Xcode、Visual studio 系列、C++ Builder、Delphi系列 (2)找到一個文字編譯器 (3)生成源程式檔案,以.c為字尾 2.預編譯  檔案以.i字尾 (1)標頭檔案的展開 巨集展