博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
8-22学习练习[一个viewController整合增删移动功能]
阅读量:6076 次
发布时间:2019-06-20

本文共 9048 字,大约阅读时间需要 30 分钟。

一个tableView页面,左上角的按钮用来添加行,同时可以移动行,右上角的按钮用来删除行,不能移动行,要求第一行不能被改变(删除,移动,增加),第一行用来返回上一级。

实现效果:

上面展示了一个从根视图跳转到子视图,再从添加选项到移动再到删除,然后返回根视图的一个过程。

操作步骤:

1.创建一个Empty项目

2.创建根视图控制器,命名为FirstViewController

FirstViewController.h:

#import 
@interface FirstViewController : UITableViewController @property(nonatomic,retain) NSMutableArray *array; @end

FirstViewController.m:

#import "FirstViewController.h" #import "DXWViewController.h" @interface FirstViewController ()  @end NSString *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 
@interface DXWViewController : UITableViewController
@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
本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366424,如需转载请自行联系原作者
你可能感兴趣的文章
OpenCV4Android
查看>>
16秋进度条9
查看>>
SocketServer
查看>>
生物信息学数据库--介绍
查看>>
使用Nodejs获取博客园博客数据并处理转发
查看>>
[05]表格元素
查看>>
[MongoDB教程] 1.简介
查看>>
结构和级联(CSS终极指南随笔)
查看>>
MFC TOOLBAR
查看>>
Maven项目构建利器01——为什么要使用Maven
查看>>
html编写过程中组件的布局
查看>>
理解管理信息系统
查看>>
ng1.3+表单验证<AngularJs>
查看>>
命令行下玩VC
查看>>
linux下svn客户端更改用户账号密码
查看>>
鸡蛋的营养价值和正确吃法
查看>>
IOS系列swift语言之课时四
查看>>
Yii教程
查看>>
软件设计模式
查看>>
写GULP遇到的ES6问题详解
查看>>