iOS开发之高级视图—— UITableView操作——新增
来源:互联网 发布:广告宣传单设计软件 编辑:程序博客网 时间:2024/05/16 09:13
UITableView是可以被编辑的,它包含三种操作:新增、删除和移动。首先学习一下新增操作的步骤。
新增操作步骤:
1:先设置UITableView代理//设置UITableViewDelegate 代理
tableview.delegate = self;
2:设置tableView允许编辑:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//开启编辑模式
[tableView setEditing:YES animated:YES];
}
3. 设置行是否可以编辑
// UITableViewDataSource协议中定义的方法。该方法的返回值决定某行是否可编辑
- (BOOL) tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
return YES;
}
4:设置 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;方法
//通过本方法返回删除(UITableViewCellEditingStyleDelete)或者新增(UITableViewCellEditingStyleInsert)状态;
//若不实现此方法,则默认为删除模式。
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
//表示支持默认操作
//return UITableViewCellEditingStyleNone;
//表示支持删除操作
//return UITableViewCellEditingStyleDelete;
//表示支持新增操作
return UITableViewCellEditingStyleInsert;
}
5:进行新增操作
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
[ list insertObject:@"" atIndex:indexPath.row];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
//取消编辑状态
[tableView setEditing:NO animated:YES];
}
下面是一个实现UITableView的行新增操作的例子
ViewController.m
//// ViewController.m// UITableViewInsertApp//// Created by Apple on 16/5/25.// Copyright © 2016年 Apple. All rights reserved.//#import "ViewController.h"@interface ViewController ()@endNSMutableArray* list;UITableView* tableView;@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self.view setBackgroundColor:[UIColor redColor]]; //创建一个数组,存储需要显示的数据 // 初始化NSMutableArray集合 list = [[NSMutableArray alloc] initWithObjects:@"李青", @"瑞兹", @"扎克", @"卡利斯塔", @"提莫", @"阿狸",nil]; //创建UITableView对象 tableView = [[UITableView alloc]initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStyleGrouped]; // 设置数据源代理,必须实现协议UITableViewDataSource中的相关方法 tableView.dataSource = self; tableView.delegate = self; UILabel* headerLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 50, self.view.frame.size.width, 50)]; [headerLabel setText:@"英雄列表"]; //设置UITable头信息 [tableView setTableHeaderView:headerLabel]; UILabel* footerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 30)]; [footerLabel setText:@"申请出战"]; //设置UITable尾部信息 [tableView setTableFooterView:footerLabel]; //设置行cell高(默认44px) [tableView setRowHeight:50]; //设置分割线颜色 [tableView setSeparatorColor:[UIColor redColor]]; //设置分割线风格 [tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine]; [self.view addSubview:tableView]; }#pragma mark -UITableViewDataSource// @required//提供tableView中的分区中的数据的数量- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return [list count];}//可重用标识符,在UITableView的cell缓存池当中所有的cell的标示符都是刚定义的cellID,因为重用时无所谓获取哪一个cell,只要是cell就可以static NSString* cellID = @"cellID";// @required//将提供 tableView 中显示的数据- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ // 根据cellID获取可重用的UITableViewCell对象 UITableViewCell* tableViewCell = [tableView dequeueReusableCellWithIdentifier:cellID]; if (tableViewCell == nil) { //创建一个UITableViewCell对象,并绑定到cellID tableViewCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; } //设置cell上显示的数据 tableViewCell.textLabel.text = [list objectAtIndex:indexPath.row]; //设置 选择 图标 tableViewCell.accessoryType =UITableViewCellAccessoryDisclosureIndicator; //设置 选中 cell的状态 tableViewCell.selectionStyle = UITableViewCellSelectionStyleBlue; //返回设置好数据的cell给UITableView对象 return tableViewCell; }// @optional// 返回表视图的分区数量- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1;}// 返回区域的名称- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ return @"我购买的英雄";}//************************************// UITableViewDataSource协议中定义的方法。该方法的返回值决定某行是否可编辑- (BOOL) tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{ // 如果该表格行的数据为提莫,返回NO——代表这行数据不能编辑 if ([[list objectAtIndex:[indexPath row]] isEqualToString:@"提莫"]) { NSLog(@"-----提莫不能编辑------"); return NO; } // 除了第2个表格行的数据不能编辑 if (indexPath.row == 1) { NSLog(@"-----第二行不能编辑------"); return NO; } NSLog(@"-----canEditRowAtIndexPath------"); return YES;}//创建一个全局变量,以便获取新增行所在的位置,刷新该新增行的状态long row = 0;// UITableViewDataSource协议中定义的方法。// 编辑(包括删除或插入)完成时激发该方法- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"-----新增------%ld",indexPath.row); // 如果正在提交插入操作 if(editingStyle == UITableViewCellEditingStyleInsert) { // 将新行的数据插入到底层NSArray集合中 // 我们实现的是在所选行的位置插入一行,因此直接使用了参数indexPath [list insertObject:@"" atIndex:indexPath.row]; // 为UITableView控件的界面上插入一行 // tableView刷新方式 设置tableView带动画效果 [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; // 弹出输入框 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"购买英雄" message:@"请输入新购买的英雄名字" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定" , nil]; // 设置该警告框显示一个普通的输入框 alert.alertViewStyle = UIAlertViewStylePlainTextInput; // 显示UIAlertView [alert show]; row = indexPath.row; } //取消编辑状态 [tableView setEditing:NO animated:YES]; }- (void) alertView:(UIAlertView *)alertViewclickedButtonAtIndex:(NSInteger)buttonIndex{ // cancel=0 other=1 NSLog(@"buttonIndex = %ld",(long)buttonIndex); // 如果用户单击了第一个按钮 if (buttonIndex == 1) { // 获取UIAlertView中第1个输入框 UITextField* nameField = [alertView textFieldAtIndex:0]; // 显示用户输入的英雄名字 NSString* name = nameField.text; // 刷新集合index的数据 [list replaceObjectAtIndex:row withObject:name]; // 重新加载数据 [tableView reloadData]; }}#pragma mark -------UITableViewDelegate// 通过本方法返回删除(UITableViewCellEditingStyleDelete)或者新增(UITableViewCellEditingStyleInsert);// 若不实现此方法,则默认为删除模式。- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"--editingStyleForRowAtIndexPath---"); //表示支持新增操作 return UITableViewCellEditingStyleInsert;}// 设置点击某个Cell的响应操作,选择某行的时候执行- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"--您选中的数据是-[%@]---",[list objectAtIndex:indexPath.row]); // 设置tableView允许进入编辑状态(默认的编辑状态是 删除状态) [tableView setEditing:YES animated:YES]; }@end
效果图如下:
启动页面:
点击任意一行,都会进入如下画面,由图可见,第二行的“瑞兹”和名字为“提莫”的这两行没有“➕”,这跟代码设置的不能进行编辑符合。
1 0
- iOS开发之高级视图—— UITableView操作——新增
- iOS开发之高级视图—— UITableView常用方法
- iOS开发之高级视图—— UITableView操作——删除
- iOS开发之高级视图—— UITableView操作——移动
- iOS开发之高级视图—— UITableView的简化操作——UITableViewController
- iOS开发之高级视图—— UITableView(五)表视图索引
- iOS开发之高级视图—— UITableView(六)表视图刷新
- iOS开发之高级视图—— UITableView(一)简单例子
- iOS开发之高级视图—— UITableView(二)编辑选中行
- iOS开发之高级视图—— UITableView(三)读取plist文件
- iOS开发之高级视图—— UITableView(四)自定义Cell
- iOS开发之高级视图—— UITableView(一)简单例子
- iOS开发之高级视图——UISearchBar
- iOS开发之高级视图—— UISearchController
- iOS开发之高级视图——UINavigationBar
- iOS开发之高级视图—— UITabBarController
- iOS开发之高级视图—— UICollectionView
- iOS开发之高级视图—— UICollectionViewController
- 2.6 MYSQL的输出格式
- LeetCode题解——House Robber III
- codeforces58
- I/O复用之 select和epoll
- 欢迎使用CSDN-markdown编辑器
- iOS开发之高级视图—— UITableView操作——新增
- 软件下载地址
- 你的团队能通过电梯测试吗?
- 关于测试人员的职业发展
- Android图像处理(三) 刮刮卡
- 给android空apk包打签名
- 如何编写系统测试计划
- 分享一个网络安全工具百宝箱的地址,超全!
- 项目文件列表