iOS基礎 - UITableView的數據源和代理

1、UITableView的代理方法數組

#pragma mark 每一行的高度atom

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPathspa

#pragma mark 選中了某一行就會調用設計

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 代理

#pragma mark 取消選中了某一行就會調用對象

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath排序

#pragma mark 當用戶提交了一個編輯操做就會調用(好比點擊了「刪除」按鈕)事件

// 只要實現了這個方法,就會默認添加滑動刪除功能開發

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPathget

#pragma mark 當移動了某一行cell就會調用

// 只要實現了這個方法,就會默認添加排序功能

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath

2、修改Cell的狀態

1.最好經過「修改模型數據」來修改Cell的狀態

2.修改步驟

1> 修改模型數據

2> 刷新表格

總體刷新:reloadData(最重要)

局部刷新:reloadRowsAtIndexPaths:withRowAnimation:

3、UITableView常見方法

1.取消選中某一行(去掉cell選中時默認的藍色背景)

- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;

2.局部刷新(僅僅刷新indexPaths數組中裝着的行)

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

3.總體刷新(屏幕中的每一行都刷新)

- (void)reloadData;

4.直接刪除界面上的行數(要求模型數據也要刪掉對應的數量)

- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

5.設置編輯模式

@property(nonatomic,getter=isEditing) BOOL editing; 

- (void)setEditing:(BOOL)editing animated:(BOOL)animated;

// 注意:

無論是局部刷新,仍是總體刷新,原理都是:

UITableView從新向數據源(dataSource)和代理(delegate)發送相應的消息,最終將獲得的數據展現出來

 

 

 

 

1.常見錯誤解析

1.1

錯誤緣由:說ViewController 沒有實現 tableView:numberOfRowsInSection:

解決方式:實現tableView:numberOfRowsInSection:

1.2

UITableView內部實現原理:

數據源實現了這個方法

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

tableView內部自動會調用如下方法添加cell

[tableView addSubview:cell];

若是返回的cell爲空,也就意味着生成下面一行代碼。

[tableView addSubview:nil];

addSubview是將右邊參數添加到數組中保存起來,而數組是不能添加空值的。全部集合對象都不能出傳空。例如數組,字典,NSSet

以上錯誤總結:做爲tableView的數據源必須實現兩個方法。

返回行數

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

返回每一行顯示的內容

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

另外返回每一行顯示的內容不能返回nil

2.淘寶界面例子思路

UITableView開發模式都是先將數據轉換爲模型。

步驟一:根據plist文件建立模型對象

步驟二,解析plist文件,將文件中的數據轉換爲模型對象。

步驟三:將模型對象用一個數組保存起來

步驟四:實現tableView的數據源方法。(設置數據源,遵照數據源協議)

步驟五:將字典轉化爲模型的操做封裝到模型裏面去。

步驟六:根據設計角度的上面思考,須要實現兩個方法。

步驟七:實現tableView的代理方法。(設置代理,遵照代理協議)

步驟八:點擊某一行打鉤實現步驟:

  1. 用一個數組記錄住選中的模型(若是模型在數組中了就刪除,沒有就添加)
  2. 刷新表格

步驟九:在返回每一行的方法中,添加一個判斷來決定是否cell須要打鉤

步驟十:更改UILabel的顯示

步驟十一:監聽刪除按鈕的點擊

  1. 刪除模型
  2. 刷新表格
  3. 更改標題
  4. 清空被選中模型的數組
  5. 讓刪除按鈕不能點擊

3.事件處理補充:UILable不能處理事件。所以把UILabel放在按鈕上面也能點擊,他會把事件傳遞給下一個控件處理。

4.刷新表格行的方法.

 使用注意:必須先後數據保持一致才能調用這些方法,不然會報錯。

-(void)reloadRowsAtIndexPaths:(NSArray*)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

-(void)reloadSections:(NSIndexSet*)sections withRowAnimation:(UITableViewRowAnimation)animation;

使用注意:必須數據刪除多少,表格刪除多少,先後數據不一致才能調用這些方法,不然會報錯。

- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

- (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;

- (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;

這個刷新方法,沒有限制

- (void)reloadData;

5.UITableView編輯模式刪除功能小例子思路

步驟一:搭建頁面

步驟二:實現數據源方法。(設置數據源,遵照數據源協議)

步驟三:建立數據模型

步驟四:建立數組保存數據模型

步驟五:監聽刪除按鈕,點擊刪除按鈕進入編輯模式

步驟六:改本地化

步驟七:實現代理方法。

當用戶提交一個編輯操做就會調用。實現這個方法還會默認支持滑動刪除

  1. 刪除模型數據
  2. 刷新表格

步驟八:實現排序功能

  1. 調整模型數據裏的順序
  2. 取出要拖動的模型數據
  3. 先刪除要拖動的模型數據
  4. 而後將拖動的模型數據插入新的位置

6.UITableViewCell的結構:UITableViewCell外面有一層ContentView,之後要往UITableViewCell裏添加子控件,添加到ContentView上面。

7.MVC

模型中不能擁有控制器和視圖,模型有可能用來重用的,包含控制器就不能重用了,由於模型脫離控制器就不能使用了。

視圖不能直接訪問模型。

視圖和模型的聯繫都是經過控制器。

控制器向模型拿到數據展現到視圖上。

相關文章
相關標籤/搜索