UITableView

一.UITableView 基本概述

UITableView 繼承于UIScrollVIew,可以滾動.

UITableView 的每一條數據對應的單元格叫做Cell, 是UITableViewCell的一個對象,繼承于UIView.

UITableView 可以分區顯示, 每一個分區稱為section, 每一行稱為row, 編號都從0開始.

系統提供了一個專門的類來整合section和row, 叫做NSIndexPath.


A部分為UITableVIew的分區,叫做section


B部分為UITableView的每一行,叫做row


section和row代表一個UITableViewCell在UITableView上的位置

二.UITableView的基本使用

/*

UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds ?style:UITableViewStylePlain];

[self.view addSubview:tableView];

[tableView release];

*/

1.UITableView的樣式枚舉

UITableView的初始化方法包含一個UITableViewStyle類型的參數

這是一個枚舉類型,分為兩種UITableViewStylePain,UITableViewStyleGrouped.

UITableViewStylePlain
UITableViewStyleGroup

2.UITableView顯示的相關屬性

? ? ? ? ? ? ? ? ? ? ? ? ?rowHeight ? ?行高

? ? ? ? ? ? ? ? ? ? ? ? ?separatorStyle ? 分隔線樣式

? ? ? ? ? ? ? ? ? ? ? ? ?separatorColor ? 分隔線顏色

? ? ? ? ? ? ? ? ? ? ? ? ?tableHeaderView ? UITableView的置頂視圖

? ? ? ? ? ? ? ? ? ? ? ? ?tableFooterView ? UITableView置底視圖

三.UITableView顯示數據

1.UITableView中有兩個重要的屬性:

@property (nonatomic, weak, nullable) id<UITableViewDataSource> dataSource; ?------顯示數據相關的代理

@property (nonatomic, weak, nullable) id<UITableViewDelegate> delegate; ?------視圖操作相關的代理

2.UITableView代理的實現代碼

(1)簽訂UITableView協議

/*

@interface ?ViewController ?( ) ?<UITableViewDataSource, UITableViewDelegate>

@end

*/

(2)設置當前的ViewController為UITableView代理

/*

@implementation ?ViewController

-(void)viewDidLoad{

[super ?viewDidLoad];

UITableView ?*tableView ?= ?[[UITableView ?alloc] ?initWithFrame:self.view.bounds ?style:UITableViewStylePlain];

// 設置dataSource代理

tableView.dataSource ?= ?self;

// 設置delegate代理

tableView.delegate ?= ?self;

[self.view ?addSubview:tableView];

[tableView ?release];

}

*/

UITableViewDataSource

UITableVIew的DataSource是負責給UITableView對象提供數據的代理,遵循UITableViewDataSource協議

協議中有兩個必須實現的協議方法

UITableViewCell

UITableView的每一個單元格是UITableViewCell類的對象,繼承于UIView.

UITableViewCell默認提供了3個視圖屬性:

3種視圖屬性

四.UITableViewCell的重用機制

UITableView有一個重用機池機制管理cell,目的是使用盡可能少的cell顯示所有數據.

1.UITableView重用cell的流程

(1)當一個cell被滑出屏幕,這個cell會被系統放到相應的重用池中.

(2)當tableView需要顯示一個cell,會先去重用池中嘗試獲取一個cell.

(3)如果重用池沒有cell,就會創建一個cell.

(4)取得cell之后會重新賦值進行使用.

2.UITableView重用cell的代碼流程

(1)在創建UITableView之后,需要注冊一個cell類,當重用池中沒有cell的時候,系統可以自動創建cell. ?相關方法:

/*

-(void)registerClass:(class)cellClass forCellReuseldentifier:(NSString *)identifier;

*/

(2)系統提供了一個獲取重用池中cell的方法(需要提供一個重用標識):

/*

-(UITableViewCell *)dequeueReusableCellWithldentifier:(NSString *)identifier;

*/

3.修改后的UITableView代碼

/*

-(void)viewDidLoad{

[super ?viewDidLoad];

/*創建tableView的代碼*/

// ?參數1: 當重用池沒有cell的時候使用什么類創建Cell

// ?參數2: 這個重用池的標識

[tableView ?registerClass:[UITableViewCell ?class] forCellReuseIdentifier:@"reuse"];

}

*/

4.修改后的UITableViewDataSource協議代碼

// tableView每次要顯示一個cell都會調用這個方法獲取

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

//1.從重用池中取得一個cell, 如果重用池中沒有cell, 系統會根據注冊的cell類自動創建一個返回

UITableViewCell ?*cell ?= ?[tableView ?dequeueReusableCellWithIdentifier:@"reuse"];

//2.給cell上的視圖重新賦值

cell.textLabel.text ?= ?@"標題";

//3.返回cell

return ?cell;

}

五.UITableView和數組數據的結合使用

UITableView每一行顯示的內容不可能都是一樣的.

1.UITableView和數組

/*

@interface ?ViewController ( ) <UITableViewDataSource, UITableViewDelegate>

// 數組屬性, 用來和tableView結合使用

@property (nonatomic, retain) NSMutableArray ?*sourceArr;

@end

@implementation ?ViewController

- (void)viewDidLoad {

[super ?viewDidLoad];

// 初始化數組

self.sourceArr ?= ?[NSMutableArray ?arrayWithObjects:@"張三",@"李四",@"王五",@"趙六",nil];

}

2.UITableView結合數組的代碼(1)

// tableView每個分區要顯示的行數

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

// 根據元素個數設置行數

return ?self.sourceArr.count;

}

// tableView每次要顯示一個cell都會調用這個方法獲取

-(UITableViewCell ?*)tableView:(UITableVIew *)tableView cellForRowAtIndexpath:(NSIndexPath *)indexPath{

UITableViewCell ?*cell ?= ?[tableView ?dequeueReusableCellWithIdentifier:@"reuse"];

// 根據row從數組中取值

cell.textLable.text ?= [self.sourceArr ?objectAtIndex:indexPath.row];

return ?cell;

}

六.UITableView的常用協議方法

1.UITableViewDataSource

UITableViewDataSource

2.UITableViewDelegate

UITableViewDelegate
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容