iOS.UIKit.17.UITableView -- Cells Operation
1、案例介绍:表视图中单元格的增加、删除、移动,如图01,02
图01图02
2、.h
#import <UIKit/UIKit.h> @interface CQ26ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate> @property (weak,nonatomic) IBOutlet UINavigationItem *navgationItem; @property (weak,nonatomic) IBOutlet UITableView *tableView; @property (strong,nonatomic) IBOutlet UITextField *txtField; @property (nonatomic,strong) NSMutableArray *listTeams; @end
3、.m
#import "CQ26ViewController.h" @interface CQ26ViewController () @end @implementation CQ26ViewController - (void)viewDidLoad { [super viewDidLoad]; // 1、设置导航栏 self.navgationItem.rightBarButtonItem = self.editButtonItem; self.navgationItem.title = @"单元格插入和删除"; // 2、设置单元格文本框 self.txtField.hidden = YES; self.txtField.delegate = self; // 3、将当前视图控制器分配给表示图的委托和数据源 self.tableView.delegate = self; self.tableView.dataSource = self; self.listTeams = [[NSMutableArray alloc] initWithObjects:@"黑龙江",@"吉林",@"辽宁", nil]; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 50; } #pragma mark -- UIViewController生命周期方法,用于响应视图编辑状态变化 - (void)setEditing:(BOOL)editing animated:(BOOL)animated { [super setEditing:editing animated:animated]; [self.tableView setEditing:editing animated:YES]; if (editing) { self.txtField.hidden = NO; } else { self.txtField.hidden = YES; } } #pragma mark UITableViewDataSource协议方法 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [self.listTeams count] + 1; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // 1、加载cell static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } // 2、设置cell的内容 BOOL b_addCell = (indexPath.row == self.listTeams.count); if (!b_addCell) { cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; cell.textLabel.text = [self.listTeams objectAtIndex:indexPath.row]; }else{ self.txtField.frame = CGRectMake(10, 0, 300, 44); self.txtField.text = @""; [cell.contentView addSubview:self.txtField]; } return cell; } #pragma mark UITableViewDelegate协议方法 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { if(indexPath.row == [self.listTeams count]){ return UITableViewCellEditingStyleInsert; }else{ return UITableViewCellEditingStyleDelete; } } #pragma mark UITableViewDataSource协议方法 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { [self.listTeams removeObjectAtIndex:indexPath.row]; [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; }else{ [self.listTeams insertObject:self.txtField.text atIndex:[self.listTeams count]]; [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; } [self.tableView reloadData]; } #pragma mark -- UITextFieldDelegate委托方法,关闭键盘 - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; } #pragma mark -- UITextFieldDelegate委托方法,避免键盘遮挡文本框 - (void) textFieldDidBeginEditing:(UITextField *)textField { UITableViewCell *cell = (UITableViewCell*) [[textField superview] superview]; [self.tableView setContentOffset:CGPointMake(0.0, cell.frame.origin.y) animated:YES]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
4、移动代码
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath*)indexPath { return YES; } - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath*)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath { NSString *stringToMove = [self.listTeams objectAtIndex:sourceIndexPath.row]; [self.listTeams removeObjectAtIndex:sourceIndexPath.row]; [self.listTeams insertObject:stringToMove atIndex:destinationIndexPath.row]; } #pragma mark --UITableViewDelegate 协议方法 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewCellEditingStyleNone; } #pragma mark -- UIViewController生命周期方法,用于响应视图编辑状态变化 - (void)setEditing:(BOOL)editing animated:(BOOL)animated { [super setEditing:editing animated:animated]; [self.tableView setEditing:editing animated:YES]; }