创建操作/删除多行数据的UITableView的细节

来源:互联网 发布:mac 最新u盘启动盘 编辑:程序博客网 时间:2024/05/16 14:36
首先注意需要重写-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
这里需要注意的是返回的结果应该是
return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
虽然这个在xcode4.2编译器的时候可能会报错,提示类型问题,自己做一个强转即可,当然如果你的程序已经全面淘汰ios4,使用ios5的话,其实tableview有专门的变量去设置,即allowsMultipleSelection变量设置为YES。
通过上面的style告诉tableview我们需要进行的是多行操作。
然后当我们需要进入多行操作时,肯定需要进入编辑模式,所以需要调用
[self.tableview setEditing:YES animated:YES]
进入编辑模式后,点击cell可以进行选择和反选,这个时候就需要我们自己记录那些cell被选择,那些cell没有被选择,即在下列方法里处理
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
- (void)tableView:(UITableView *)tableView didDeRowAtIndexPath:(NSIndexPath *)indexPath
这样我们就记录了需要进行操作的cell数组了。如果你只是需要一般的tableview进行多行操作,那么基本上到此也就差不多可以了
但是如果你的界面有点风格的话,可能就需要再多点操作了。因为默认情况下进入多选操作时左边的圆圈和对勾都是系统默认的,似乎也没地方可以修改。况且你还容易因为左边缩进而导致cell一些贴图颜色的风格出现问题。
那么我自己的解决方案在下面.
首先要看下这个东西UITableViewCell的selectionStyle,这个style有3个值,分别是:
UITableViewCellSelectionStyleNone
UITableViewCellSelectionStyleBlue
UITableViewCellSelectionStyleGray
顾名思义是用来表示cell选中时出现的标示选中的颜色,但这里有个看似神奇的地方。就是当你设置cell为UITableViewCellSelectionStyleGray或者UITableViewCellSelectionStyleBlue时,且当你进入多选编辑模式时,你选中的那个cell会有一条偏白的选中条,而且貌似还很不容易修改其颜色,那么当你的cell实际背景色和这个偏白选中条不和谐时,我想就是你头疼的地方了。所以为了能多选编辑情况下能完全自定义选中的效果,我的做法是当tableview的editing为YES时设置cell.selectionStyle为UITableViewCellSelectionStyleNone,这样不管我们选不选中cell,系统再也不会主动帮我做一些自以为很好的效果。但是同时由于去掉了选中的效果后,为了表达我们选中的哪些cell,我们就需要重写cell的select方法去自绘出响应的选择效果。
即重写你的自定义的cell类里的select方法
-(void)setSelected:(BOOL)selected animated:(BOOL)animated  {      if (self.editing)//仅仅在编辑状态的时候需要自己处理选中效果      {          if (selected){               //选中时的效果          }          else {              //非选中时的效果          }      }  }

这样就解决了选中与不选中的效果了。但是还有个问题,就是多选状态下左边那个圆圈和那个对勾还是没弄好,我的处理方法是:重写cell的edit方法
-(void)setEditing:(BOOL)editing animated:(BOOL)animated{    if (editing)//编辑状态    {        if (self.editingStyle == (UITableViewCellEditingStyleInsert|UITableViewCellEditingStyleDelete)){ //编辑多选状态            if (![self viewWithTag:TagVale])  //编辑多选状态下添加一个自定义的图片来替代原来系统默认的圆圈,注意这个图片在选中与非选中的时候注意切换图片以模拟系统的那种效果            {                UIImage* img = [UIImage imageNamed:@"dot.png"];                UIImageView* editDotView = [[UIImageView alloc] initWithImage:img];                editDotView.tag = TagVale;                editDotView.frame = CGRectMake(10,15,20,20);                [self addSubView:editDotView];                [editDotView release],editDotView = nil;            }        }    }    else {        //非编辑模式下检查是否有dot图片,有的话删除        UIView* editDotView = [self viewWithTag:TagValue];        if (editDotView)        {            [editDotView removeFromSuperview];        }    }}

注意这里我们需要自己调整设置dot图片的位置,因为我这个cell是50高度,所以这么写,综上所述,当你需要自定义一个多选编辑状态而又不需要自己去完全自定义一个控件时,多修改下tableview的一些属性,多结合重写cell的select,edit,highlight等方法即可以获得相应的效果。今天到此为止
原创粉丝点击