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
錯誤緣由:說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。
UITableView開發模式都是先將數據轉換爲模型。
步驟一:根據plist文件建立模型對象
步驟二,解析plist文件,將文件中的數據轉換爲模型對象。
步驟三:將模型對象用一個數組保存起來
步驟四:實現tableView的數據源方法。(設置數據源,遵照數據源協議)
步驟五:將字典轉化爲模型的操做封裝到模型裏面去。
步驟六:根據設計角度的上面思考,須要實現兩個方法。
步驟七:實現tableView的代理方法。(設置代理,遵照代理協議)
步驟八:點擊某一行打鉤實現步驟:
步驟九:在返回每一行的方法中,添加一個判斷來決定是否cell須要打鉤
步驟十:更改UILabel的顯示
步驟十一:監聽刪除按鈕的點擊
使用注意:必須先後數據保持一致才能調用這些方法,不然會報錯。
-(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;
步驟一:搭建頁面
步驟二:實現數據源方法。(設置數據源,遵照數據源協議)
步驟三:建立數據模型
步驟四:建立數組保存數據模型
步驟五:監聽刪除按鈕,點擊刪除按鈕進入編輯模式
步驟六:改本地化
步驟七:實現代理方法。
當用戶提交一個編輯操做就會調用。實現這個方法還會默認支持滑動刪除
步驟八:實現排序功能
模型中不能擁有控制器和視圖,模型有可能用來重用的,包含控制器就不能重用了,由於模型脫離控制器就不能使用了。
視圖不能直接訪問模型。
視圖和模型的聯繫都是經過控制器。
控制器向模型拿到數據展現到視圖上。