接著iOS學習之Table View的簡單使用 這篇,這裡主要講UITableView 中的Cell的操作,包括標記、移動、刪除、插入。
為了簡單快捷,直接從原來那篇的代碼開始,代碼:http://download.csdn.net/detail/totogo2010/4361870
要進行資料的操作了,把代碼裡的不可變數組改成可變的:
NSArray *list -》NSMutableArray *list
1、標記Cell。
效果如下:
開啟項目,
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath。
添加代碼
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{// NSString *rowString = [self.list objectAtIndex:[indexPath row]];// UIAlertView * alter = [[UIAlertView alloc] initWithTitle:@"選中的行資訊" message:rowString delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];// [alter show]; UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; if (cell.accessoryType == UITableViewCellAccessoryNone) { cell.accessoryType = UITableViewCellAccessoryCheckmark; }else { cell.accessoryType = UITableViewCellAccessoryNone; } [tableView deselectRowAtIndexPath:indexPath animated:YES];}
標記分別有四種效果:
UITableViewCellAccessoryCheckmark
UITableViewCellAccessoryDetailDisclosureButton
UITableViewCellAccessoryDisclosureIndicator
UITableViewCellAccessoryNone
可以自己試試。
2、刪除Cell
想要實現移動或者刪除行這樣的操作,需要啟動表格的編輯模式。使用的是setEditing:animated:方法。
開啟xib,產生Table的IBoutlet映射 tableView;
在viewDidload裡添加
[self.tableViewsetEditing:YES];
這是啟動運行程式,
開啟可編輯模式,預設情況顯示刪除的表徵圖的。
實現刪除的代碼:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { NSUInteger row = [indexPath row]; if (editingStyle == UITableViewCellEditingStyleDelete) { [self.list removeObjectAtIndex:row]; [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; }}
這個方法根據參數editingStyle是UITableViewCellEditingStyleDelete
在這刪除行的方法又出現了一個常量:UITableViewRowAnimationAutomatic,它表示刪除時的效果,類似的常量還有:
UITableViewRowAnimationAutomatic
UITableViewRowAnimationTop
UITableViewRowAnimationBottom
UITableViewRowAnimationLeft
UITableViewRowAnimationRight
UITableViewRowAnimationMiddle
UITableViewRowAnimationFade
UITableViewRowAnimationNone
從常量名稱開啟可以看出效果來。
這是運行,就可以刪除其中的一個Cell行了。
3、移動Cell
添加代碼如下:
3.1先把預設的刪除的表徵圖去掉
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewCellEditingStyleInsert; }
3.2返回當前Cell是否可以移動
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { return YES; }
3.3執行移動操作
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath { NSUInteger fromRow = [sourceIndexPath row]; NSUInteger toRow = [destinationIndexPath row]; id object = [self.list objectAtIndex:fromRow]; [self.list removeObjectAtIndex:fromRow]; [self.list insertObject:object atIndex:toRow]; }
運行程式:
怎麼移動呢?不要以為按住行的任何地方都能移動,要按住最左邊的三道杠的表徵圖才能拖動移動
4、插入cell:
4.1插入和刪除差不多,在
- (void)tableView:(UITableView *)tableView commitEditingStyle:
(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
添加UITableViewCellEditingStyleInsert判斷
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { NSUInteger row = [indexPath row]; if (editingStyle == UITableViewCellEditingStyleDelete) { [self.list removeObjectAtIndex:row]; [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; }else if(editingStyle == UITableViewCellEditingStyleInsert ){ NSArray *insertIndexPaths = [NSArray arrayWithObjects:indexPath,nil]; [self.list insertObject:@"inset new Cell" atIndex:row]; [tableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationMiddle]; }}
4.2 修改表徵圖為插入樣式。
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewCellEditingStyleInsert; }
運行,點加號表徵圖,
完成!
例子代碼:http://download.csdn.net/detail/totogo2010/4398669
著作權聲明:本文由http://blog.csdn.net/totogo2010/原創,歡迎轉載分享。請尊重作者勞動,轉載時保留該聲明和作者部落格連結,謝謝