這裏主要講UITableView 中的Cell的操做,包括標記、移動、刪除、插入。數組
要進行數據的操做了,把代碼裏的不可變數組改爲可變的:spa
NSArray *list -》NSMutableArray *list .net
一、標記Cell。
效果以下:blog
打開項目,rem
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath。get
添加代碼it
- -(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
UITableViewCellAccessoryNoneio
能夠本身試試。table
二、刪除Cell
想要實現移動或者刪除行這樣的操做,須要啓動表格的編輯模式。使用的是setEditing:animated:方法。class
打開xib,生成Table的IBoutlet映射 tableView;
在viewDidload裏添加
[self.tableView setEditing: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行了。
三、移動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];
- }
運行程序:
怎麼移動呢?不要覺得按住行的任何地方都能移動,要按住最左邊的三道槓的圖標才能拖動移動
四、插入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