基于tabBar类似mail多选删除的纠结实现
2011-08-21 23:44
387 查看
本来tableview多选删除是天经地义的事儿。在tabbar中想使用tableview的多选删除也没啥不对。纠结就纠结在想在tabbar中使用tableview多选删除的时候要实现类似系统自带的mail多选删除的效果。好吧,既然产品是这么设计的,合理不合理是一回事儿,能不能实现却是我的事儿,抱着“只要能实现,我就能实现的信念”,纠结了七八个小时,终于把这个不起眼的小效果搞定了。
开始界面
点了编辑以后。
选择要删除的行
点删除以后的效果
点清空以后的效果
点确定以后的效果
核心代码除了实现tabbar多选删除效果的以外,增加一个隐藏tabbar,一个在toolbar添加两个删除按钮及相关的处理方法。
整个效果实现起来的难点有三个:
1.tabbar的隐藏。
作为要控制器,它竟然不允许自己被隐藏。弄来弄去,最后隐藏toolbar的方法用的是cocochina的laigb提供的方法。http://www.cocoachina.com/bbs/read.php?tid=25042&page=3#206318.不过laigb用的y的值为320.应该是iphone4以前的设备要用这个值吧。
2.两个删除按钮的相对居中
toolbar默认添加的按钮是从左相右排列的。添加两个的话,就默认跑到最左边了。所以这个地方要使用占位符。
3.修改标签:"删除(0)"
这个地方纠结的地方有两处,1)保存这个按钮的引用,方便修改其值;2)修改它的值的时候发现,必需选用"删除(0)"占位,不然后面再修改成类似"删除(1)"的时候,显示不全。
本文出自 “rainbird” 博客,请务必保留此出处http://rainbird.blog.51cto.com/211214/645772
开始界面
点了编辑以后。
选择要删除的行
点删除以后的效果
点清空以后的效果
点确定以后的效果
核心代码除了实现tabbar多选删除效果的以外,增加一个隐藏tabbar,一个在toolbar添加两个删除按钮及相关的处理方法。
- (void) hideTabBar:(BOOL) hidden{ [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0]; for(UIView *view in self.tabBarController.view.subviews) { if([view isKindOfClass:[UITabBar class]]) { if (hidden) { [view setFrame:CGRectMake(view.frame.origin.x, 480, view.frame.size.width, view.frame.size.height)]; } else { [view setFrame:CGRectMake(view.frame.origin.x, 480-49, view.frame.size.width, view.frame.size.height)]; } } else { if (hidden) { [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, 480)]; } else { [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, 480-49)]; } } } [UIView commitAnimations]; } - (void)buttonClicked:(id)sender{ switch ([sender tag]) { case 1: //NSLog(@"要删除喽"); [dataArray removeObjectsInArray:[deleteDic allKeys]]; [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithArray:[deleteDic allValues]] withRowAnimation:UITableViewRowAnimationFade]; [deleteDic removeAllObjects]; break; case 2: //NSLog(@"要清空喽"); ; NSMutableArray *tmpArray = [[NSMutableArray alloc] init]; int end = [dataArray count]; for (int i = 0; i<end; i++) { [tmpArray addObject:[NSIndexPath indexPathForRow:i inSection:0]]; } [dataArray removeAllObjects]; [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithArray:tmpArray] withRowAnimation:UITableViewRowAnimationFade]; [tmpArray release]; break; default: break; } } - (void)clearAllHistory{ if (self.navigationItem.rightBarButtonItem.title == @"编辑") { //隐藏tabbar [self hideTabBar:YES]; //显示toolbar self.navigationController.toolbar.barStyle = UIBarStyleBlack; self.navigationController.toolbarHidden = NO; if (selectBtn == nil) { UIButton *myBtn1 = [UIButton buttonWithType:UIBarButtonItemStylePlain]; selectBtn = myBtn1; myBtn1.frame = CGRectMake(0.0f, 0.0f, 80.0f, 30.0f); [myBtn1 setTitle:@"删除(0)" forState:UIControlStateNormal]; [myBtn1 setTag:1]; [myBtn1 setBackgroundImage:[UIImage imageNamed:@"bbg.png"] forState:UIControlStateNormal]; [myBtn1 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; deleteBtn =[[UIBarButtonItem alloc] initWithCustomView:myBtn1]; UIButton *myBtn2 = [UIButton buttonWithType:UIBarButtonItemStylePlain]; myBtn2.frame = CGRectMake(0.0f, 0.0f, 80.0f, 30.0f); [myBtn2 setTitle:@"清空" forState:UIControlStateNormal]; [myBtn2 setTag:2]; [myBtn2 setBackgroundImage:[UIImage imageNamed:@"bbg.png"] forState:UIControlStateNormal]; [myBtn2 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; clearBtn = [[UIBarButtonItem alloc] initWithCustomView:myBtn2 ]; spaceBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; } [self.navigationController.toolbar setItems:[NSArray arrayWithObjects:spaceBtn,spaceBtn,deleteBtn,clearBtn,spaceBtn,spaceBtn,nil] animated:YES]; self.navigationItem.rightBarButtonItem.title = @"确定"; [self.tableView setEditing:YES animated:YES]; } else { self.navigationItem.rightBarButtonItem.title = @"编辑"; self.navigationController.toolbarHidden = YES; [self hideTabBar:NO]; [deleteDic removeAllObjects]; [self.tableView setEditing:NO animated:YES]; } }
整个效果实现起来的难点有三个:
1.tabbar的隐藏。
作为要控制器,它竟然不允许自己被隐藏。弄来弄去,最后隐藏toolbar的方法用的是cocochina的laigb提供的方法。http://www.cocoachina.com/bbs/read.php?tid=25042&page=3#206318.不过laigb用的y的值为320.应该是iphone4以前的设备要用这个值吧。
2.两个删除按钮的相对居中
toolbar默认添加的按钮是从左相右排列的。添加两个的话,就默认跑到最左边了。所以这个地方要使用占位符。
3.修改标签:"删除(0)"
这个地方纠结的地方有两处,1)保存这个按钮的引用,方便修改其值;2)修改它的值的时候发现,必需选用"删除(0)"占位,不然后面再修改成类似"删除(1)"的时候,显示不全。
本文出自 “rainbird” 博客,请务必保留此出处http://rainbird.blog.51cto.com/211214/645772
相关文章推荐
- UITableView类似Email的多选删除功能实现
- UITableView多选删除,类似mail中的多选删除效果
- UITableView多选删除,类似mail中的多选删除效果
- UITableView多选删除,类似mail中的多选删除效果
- UITableView多选删除,类似mail中的多选删除效果
- UITableView多选删除,类似mail中的多选删除效果
- UITableView多选删除,类似mail中的多选删除效果
- UITableView多选删除,类似mail中的多选删除效果
- UITableView多选删除,类似mail中的多选删除效果
- UITableView多选删除,类似mail中的多选删除效果
- UITableView多选删除,类似mail中的多选删除效果
- android 基于ListView和CheckBox实现多选和全选记录的功能(转)
- Android基于SwipeMenuListView实现滑动删除功能
- 基于jquery实现的类似百度搜索的输入框自动完成功能
- 基于Python实现通过微信搜索功能查看谁把你删除了
- 基于Spring MVC + Mybatis实现多选框批量删除
- 基于table的js目录树的实现,添加修改删除
- 利用treeview实现的文件夹的多选,并且实现类似Ajax的Loading .
- 基于React实现表单数据的添加和删除详解
- 使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能