(1)建立web
UITableView *tableView = [UITableView alloc]initWithframe: style: style有兩種形式: (1)UITableViewStyleplain 分區之間有間隔 (2)UITableViewStyleGrouped 分區之間沒有間隔條(2)基本屬性數據結構
分割線樣式:separatorStyle 分割線顏色:separetouColor 行高 :rowHeight(3)數據源DataSource 須要給tableView指定一個數據源,能夠給tableView提供數據,首先遵照協議,實現協議裏面必須實現的兩個方法:ide
每個分區的單元格數: - (NSInteger)tableView:(UITableView *)tableview numberOfRowsInSection:(NSIndexPath *)indexPath 加載單元格: -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath:)indexPath;(4)cell 分區每個單元格稱爲cell,系統提供了4種style的cell(UITAbleViewCellStyle...),不一樣的樣式在包含的控件佈局略有不一樣 (5)表頭,表尾函數
能夠給表頭tableview.tableHeaderView ,表尾 tableview.tableFootview自定義視圖。 注意⚠!!!表頭,表尾不能爲同一對象(6)設置分區數佈局
-(NSInteger)numberOfSectionsInTableView:(UITableView *) tablview//默認返回值是1(7)設置分區標題spa
-(NSString *)tableView:(UITableView *)tableview titleForheaderInSection:(NSInteger)section(8)設置分區索引code
-(NSArray *)sectionIndexTitleForTableview:(UITableView *)tableviewtableView重用機制
UITableView靠mutableSet來實現重用功能的,出屏幕的cell會被添加到mutableSet中,進去屏幕的cell, 先從set中獲取,若是獲取不到,才建立一個cell,在cell顯示以前,給cell賦上相應的內容。對象
體如今cell(單元格)的加載繼承
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static *identifier = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];//從個重用隊列裏面取 if (cell == nil) {//若是取出來爲空則從新建立 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } return cell; }UITableView編輯
增刪
(1)設置tablView處於可編輯狀態索引
-(void)setEditing:(BOOL)editing animated:(BOOL)animated(2)設置哪些行能夠被編輯
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath(3)返回編輯樣式
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath(4)增刪操做
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath [tableView beginupdates];開始編輯 if(editingStyle== UITableViewCellEditingStyleDelete) { 刪除操做 }else { 增價操做 } [tableView endupdates];結束編輯移動
(1)讓tableView處於可編輯狀態
(2)指定幾區幾行可被移動
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath(3)當出現越區移動時候觸發
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath被選中的時候觸發
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath表視圖控制器
UITableViewController
新建的UITableViewController只是簡單的把上面的函數自動生成,不用咱們一個一個去找,並且它的self.view是一個UITableView類型的,因此不用再新建UITableView,默認容許編輯。編輯樣式默認是所有刪除
自定義cell
自定義cell就是建立一個UITableViewCell子類,將cell上的控件建立都封裝在子類中
!!! 子視圖控件添加到cell的contentView上 main
如何通訊?
cell中聲明一個Model類型的屬性,viewController中獲取到Model對象後賦值給cell的Model屬性,
cell中重寫Model的setter方法,把Model對象中的內容從新賦值給各個控件。(M和V不直接通訊,C負責M和V之間進行通訊)
好比:student是一個model,也是自定義cell裏面中的一個變量,在viewController裏面獲取到model對象賦值給cell的Model屬性,則會進行下邊的操做
-(void)setStudent:(Student *)student { if (_student != student) { [_student release]; _student = [student retain]; // 同時給內部控件賦值 _nameLabel.text = student.name; _phoneNumberLabel.text = student.phoneNumber; _sexLabel.text = student.sex; _introduceLabel.text = student.introduce; _iconView.image = [UIImage imageNamed:student.icon]; // 改變iconView的高度, CGRect rec = _introduceLabel.frame; rec = CGRectMake(rec.origin.x, rec.origin.y, rec.size.width, [BoyTableViewCell heightForString:student.introduce ]); _introduceLabel.frame = rec; } }
在開發中比較常見一個tableView裏面有多種不一樣佈局樣式的cell,所以多種類型的cell混合在一個tableView中使用的狀況非常常見。因此常常自定義多種不一樣類型的cell。
注意事項
一般咱們在tableView :cellForRowAtIndexPath:方法中根據不一樣的Model來決定使用什麼類型的cell,每種類型的cell要定義不一樣的重用標識符以存儲在不一樣的重用隊列中。這樣cell重用的時候會根據重用標識從重用隊列中取出哪一種類型的cell
cell自適應高度
tableView:heightForRowAtindexPath:方法要比tableView:cellForRowAtIndexPath先執行,因此應該提早計算好每行cell須要多少高度