8-22学习练习[一个viewController整合增删移动功能]
来源:互联网 发布:怪盗joker js 编辑:程序博客网 时间:2024/05/16 17:53
一个tableView页面,左上角的按钮用来添加行,同时可以移动行,右上角的按钮用来删除行,不能移动行,要求第一行不能被改变(删除,移动,增加),第一行用来返回上一级。
实现效果:
上面展示了一个从根视图跳转到子视图,再从添加选项到移动再到删除,然后返回根视图的一个过程。
操作步骤:
1.创建一个Empty项目
2.创建根视图控制器,命名为FirstViewController
FirstViewController.h:
#import <UIKit/UIKit.h>@interface FirstViewController : UITableViewController@property(nonatomic,retain) NSMutableArray *array;@end
FirstViewController.m:
#import "FirstViewController.h"#import "DXWViewController.h"@interface FirstViewController ()@endNSString *CellIdentifier = @"Cell";@implementation FirstViewController- (id)initWithStyle:(UITableViewStyle)style{ self = [super initWithStyle:style]; if (self) { self.array = @[ [[DXWViewController alloc] initWithStyle:UITableViewStylePlain]]; self.title = @"目录列表"; } return self;}- (void)viewDidLoad{ [super viewDidLoad]; [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellIdentifier];}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}#pragma mark - Table view data source- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return [self.array count];}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; int row = [indexPath row]; cell.textLabel.text = ((DXWViewController *)self.array[row]).title; //有右边的>符号 cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; return cell;}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ int row = [indexPath row]; [self.navigationController pushViewController:self.array[row] animated:YES];}
3.修改AppDelegate
#import "DXWAppDelegate.h"#import "FirstViewController.h"@implementation DXWAppDelegate- (void)dealloc{ [_window release]; [super dealloc];}- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; //创建首页 FirstViewController *first = [[FirstViewController alloc] initWithStyle:UITableViewStylePlain]; //创建一个导航栏,其中的首页是FirstViewController UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:first]; //将导航栏作为根视图控制器 self.window.rootViewController = nav; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; return YES;}
4.创建子视图控制器,命名为DXWViewController
DXWViewController.h:
#import <UIKit/UIKit.h>@interface DXWViewController : UITableViewController<UIAlertViewDelegate>@property(nonatomic,retain)NSMutableArray *array;@property(retain,nonatomic)NSIndexPath *indexPath;@end
DXWViewController.m:
#import "DXWViewController.h"BOOL RIGHTBUTTON;@interface DXWViewController ()@end@implementation DXWViewController- (id)initWithStyle:(UITableViewStyle)style{ self = [super initWithStyle:style]; if (self) { self.title = @"子视图"; NSArray *arr = @[@"返回上一级",@"小花",@"小李",@"小王",@"小丁",@"小张",@"小康",@"小刘",@"小墩",@"大墩"]; self.array = [arr mutableCopy]; } return self;}- (void)viewDidLoad{ [super viewDidLoad]; //首先要添加右上角的一个edit按钮,按钮按下去可以设置可以编辑 UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:@"添加" style:UIBarButtonItemStyleBordered target:self action:@selector(itemLeftButtonClick:)];self.navigationItem.leftBarButtonItem = button; UIBarButtonItem *button1 = [[UIBarButtonItem alloc] initWithTitle:@"删除" style:UIBarButtonItemStyleBordered target:self action:@selector(itemRightButtonClick:)]; self.navigationItem.rightBarButtonItem = button1;}- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return [self.array count];}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *identifier = @"Identifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } int row = [indexPath row]; cell.textLabel.text = self.array[row]; return cell;}-(void)itemLeftButtonClick:(id)sender{ //设置可以编辑 RIGHTBUTTON = false; [self.tableView setEditing:!self.tableView.editing];//设置成和当前状态相反的状态 if (self.tableView.editing) { [self.navigationItem.leftBarButtonItem setTitle:@"完成"]; } else { [self.navigationItem.leftBarButtonItem setTitle:@"添加"]; }}-(void)itemRightButtonClick:(id)sender{ RIGHTBUTTON = true; //设置可以编辑 [self.tableView setEditing:!self.tableView.editing];//设置成和当前状态相反的状态 if (self.tableView.editing) { [self.navigationItem.rightBarButtonItem setTitle:@"完成"]; } else { [self.navigationItem.rightBarButtonItem setTitle:@"删除"]; }}//设置编译图标-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{ //删除 if (RIGHTBUTTON) { return UITableViewCellEditingStyleDelete; } else { return UITableViewCellEditingStyleInsert; //return UITableViewCellEditingStyleNone; }}//设置是否可以移动-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath{ if (RIGHTBUTTON) { return NO; } else { if (indexPath != 0) { return YES; } }}-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{ if ([indexPath row] == 0) { return NO; } else { return YES; }}//实现UIAlertView代理协议-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{ //获取AlertView中的数据 NSString *str = [alertView textFieldAtIndex:0].text; //将数据插入到array数组中(位置是点击的位置的下一行) [self.array insertObject:str atIndex:[self.indexPath row]+1]; //用点击位置的下一行创建一个新的NSIndexPath int newrow = [self.indexPath row]+1; NSIndexPath *index = [NSIndexPath indexPathForRow:newrow inSection:0]; //在tableView的这个NSIndexPath中插入数据 [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:index] withRowAnimation: UITableViewRowAnimationFade]; }-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ //删除按钮 if (RIGHTBUTTON) { if ([indexPath row] != 0) { int row = [indexPath row]; [self.array removeObjectAtIndex:row]; [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationMiddle]; } } //添加按钮 else { //获得点击的indexPath self.indexPath = indexPath; //创建一个UIAlertView,用来获得数据 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"enterstring" message:nil delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil]; //带有输入框的UIAlertView alert.alertViewStyle = UIAlertViewStylePlainTextInput; [alert show]; }}//可以根据行来设置delete按钮位置上button的标题-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{ return @"你删我一个试试";}-(void)dealloc{ [self.array release]; [self.indexPath release]; [super dealloc];}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ if ([indexPath row] == 0) { [self.navigationController popToRootViewControllerAnimated:YES]; } //蓝色背景消失 [tableView deselectRowAtIndexPath:indexPath animated:YES];} -(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath{ if (!RIGHTBUTTON) { if ([destinationIndexPath row]!=0) { id object= self.array[[sourceIndexPath row]]; [self.array removeObject:self.array[[sourceIndexPath row]]]; [self.array insertObject:object atIndex:[destinationIndexPath row]]; NSLog(@"%d",[self.array count]); NSLog(@"当前位置%d,目标位置%d",[sourceIndexPath row],[destinationIndexPath row]); } //如果是跟第一行移动,则不允许这样操作,重新加载数据 [self.tableView reloadData]; }}@end
Demo源文件:
http://download.csdn.net/detail/s10141303/5995485
- 8-22学习练习[一个viewController整合增删移动功能]
- 晨魅--练习ssm框架整合,做增删改查操作
- 练习ssm框架整合,做增删改查操作
- 练习ssm框架整合,做增删改查操作
- jQuery学习18---移动练习
- SpringBoot整合Mybatis实现增删改查的功能
- 练习springMVC的一个小例子,为了方便以后继续学习springmvc和别的框架整合
- 一个ViewController不能加载
- 练习:利用迭代器写一个注册登录功能
- Python学习练习:批量移动文件
- 编写一个电话簿,可以实现增删查找的功能
- IOS 学习五 ----ViewController
- iOS学习笔记-----ViewController
- 原创springmvc+spring3+hibernate4框架整合,实现增删改查功能
- springmvc+spring3+hibernate4框架简单整合,简单实现增删改查功能
- ztree异步加载-------右键增删改------点击事件-----拖拽功能----项目整合
- solr系列三:solr和spring整合并实现增删改查功能
- UI学习 -绘制文字功能练习
- charge相关---- android
- 多线程16: 多线程笔试面试题汇总
- Apache Ambari安装过程(CentOS 6)
- Contract
- eclipse配置maven web项目
- 8-22学习练习[一个viewController整合增删移动功能]
- Jsoup API解析HTML中input标签
- linux 进程间共享内存与信号量的使用
- wordpress子目录,博客根目录
- 无法SSH到Ubuntu
- ubuntu qt4 终端更改
- servlet缩放图片
- Miller–Rabin 素性测试
- 二叉树(c++实现)