創建操作/刪除多行數據的UITableView的細節


首先注意需要重寫-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
這裏需要注意的是返回的結果應該是
return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
雖然這個在xcode4.2編譯器的時候可能會報錯,提示類型問題,自己做一個強轉即可,當然如果你的程序已經全面淘汰ios4,使用ios5的話,其實tableview有專門的變量去設置,即allowsMultipleSelection變量設置爲YES。
通過上面的style告訴tableview我們需要進行的是多行操作。
然後當我們需要進入多行操作時,肯定需要進入編輯模式,所以需要調用
[self.tableview setEditing:YES animated:YES]
進入編輯模式後,點擊cell可以進行選擇和反選,這個時候就需要我們自己記錄那些cell被選擇,那些cell沒有被選擇,即在下列方法裏處理
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
- (void)tableView:(UITableView *)tableView didDeRowAtIndexPath:(NSIndexPath *)indexPath
這樣我們就記錄了需要進行操作的cell數組了。如果你只是需要一般的tableview進行多行操作,那麼基本上到此也就差不多可以了
但是如果你的界面有點風格的話,可能就需要再多點操作了。因爲默認情況下進入多選操作時左邊的圓圈和對勾都是系統默認的,似乎也沒地方可以修改。況且你還容易因爲左邊縮進而導致cell一些貼圖顏色的風格出現問題。
那麼我自己的解決方案在下面.
首先要看下這個東西UITableViewCell的selectionStyle,這個style有3個值,分別是:
UITableViewCellSelectionStyleNone
UITableViewCellSelectionStyleBlue
UITableViewCellSelectionStyleGray
顧名思義是用來表示cell選中時出現的標示選中的顏色,但這裏有個看似神奇的地方。就是當你設置cell爲UITableViewCellSelectionStyleGray或者UITableViewCellSelectionStyleBlue時,且當你進入多選編輯模式時,你選中的那個cell會有一條偏白的選中條,而且貌似還很不容易修改其顏色,那麼當你的cell實際背景色和這個偏白選中條不和諧時,我想就是你頭疼的地方了。所以爲了能多選編輯情況下能完全自定義選中的效果,我的做法是當tableview的editing爲YES時設置cell.selectionStyle爲UITableViewCellSelectionStyleNone,這樣不管我們選不選中cell,系統再也不會主動幫我做一些自以爲很好的效果。但是同時由於去掉了選中的效果後,爲了表達我們選中的哪些cell,我們就需要重寫cell的select方法去自繪出響應的選擇效果。
即重寫你的自定義的cell類裏的select方法
[plain] view plaincopy
  1. -(void)setSelected:(BOOL)selected animated:(BOOL)animated    
  2. {    
  3.     if (self.editing)//僅僅在編輯狀態的時候需要自己處理選中效果    
  4.     {    
  5.         if (selected){     
  6.             //選中時的效果    
  7.         }    
  8.         else {    
  9.             //非選中時的效果    
  10.         }    
  11.     }    
  12. }  

這樣就解決了選中與不選中的效果了。但是還有個問題,就是多選狀態下左邊那個圓圈和那個對勾還是沒弄好,我的處理方法是:重寫cell的edit方法
[plain] view plaincopy
  1. -(void)setEditing:(BOOL)editing animated:(BOOL)animated  
  2. {  
  3.     if (editing)//編輯狀態  
  4.     {  
  5.         if (self.editingStyle == (UITableViewCellEditingStyleInsert|UITableViewCellEditingStyleDelete)){ //編輯多選狀態  
  6.             if (![self viewWithTag:TagVale])  //編輯多選狀態下添加一個自定義的圖片來替代原來系統默認的圓圈,注意這個圖片在選中與非選中的時候注意切換圖片以模擬系統的那種效果  
  7.             {  
  8.                 UIImage* img = [UIImage imageNamed:@"dot.png"];  
  9.                 UIImageView* editDotView = [[UIImageView alloc] initWithImage:img];  
  10.                 editDotView.tag = TagVale;  
  11.                 editDotView.frame = CGRectMake(10,15,20,20);  
  12.                 [self addSubView:editDotView];  
  13.                 [editDotView release],editDotView = nil;  
  14.             }  
  15.         }  
  16.     }  
  17.     else {  
  18.         //非編輯模式下檢查是否有dot圖片,有的話刪除  
  19.         UIView* editDotView = [self viewWithTag:TagValue];  
  20.         if (editDotView)  
  21.         {  
  22.             [editDotView removeFromSuperview];  
  23.         }  
  24.     }  
  25. }  

注意這裏我們需要自己調整設置dot圖片的位置,因爲我這個cell是50高度,所以這麼寫,綜上所述,當你需要自定義一個多選編輯狀態而又不需要自己去完全自定義一個控件時,多修改下tableview的一些屬性,多結合重寫cell的select,edit,highlight等方法即可以獲得相應的效果。今天到此爲止
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章