zoukankan      html  css  js  c++  java
  • IOS开发之UITableView的奇技

    作者:Biaoac

    age:保密

    sex:直男

    性格:低调沉稳,乖张内涵

    博客背景:之前一直在使用UITableView,但是一直都只是初识,后来在不断的使用中找到了很多之前没有在意的东西,遂整理出来,当然,有很多还是看别人的博客中提到的点,我把他重踩一遍;

    1.点击的时候显示选中状态,但状态一直村在,必须在点击下一个的时候取消选中状态

    点击cell的时候调用
    
    - (void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath;
    //离开点击时调用,
    - (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;

    一般用法是在didSelectRowAtIndexPath方法中加入 [tableView deselectRowAtIndexPath:indexPath animated:YES]; 即点击cell时cell有背景色,如过没有选中另一个,则这个cell背景色一直在, 加入这句话效果是在点击结束后cell背景色消失。

    - (void)tableView:(UITableView )tableView didDeselectRowAtIndexPath:(NSIndexPath )indexPath2.


    2.cell选中时的背景颜色(默认灰色,现在好像只有无色和灰色两种类型了)

    @property (nonatomic) UITableViewCellSelectionStyle selectionStyle;

    UITableViewCellSelectionStyleNone,

    UITableViewCellSelectionStyleBlue,

    UITableViewCellSelectionStyleGray,

    UITableViewCellSelectionStyleDefault

    重要属性:

    indexpath.row:行indexpath.section:组 

    separatorColor:分割线的颜色separatorStyle:分割线样式 

    用来自定义头部和尾部自定义view只需要设置高度,宽度设置无效

    tableHeaderView;

    tableFooterView;

    table中展示的数据是从模型(或者其他来源-数据源)中取得的,因此要更改表格数据,只需要更改数据源中得数据,并刷新表格即可。(不要直接更改tableviewcell中textLabel中得text数据,这样上下拖动tableview还是会显示原来的数据)

    UITableViewCell的常用属性

    accessoryType:cell右边的指示器

    accessoryView:可自定义右边的view

    backgroundView:自定义背景view

    backgroundColor//优先级低于backgroundView

    selectedBackgroundView

    3.显示右侧索引

    - (NSArray )tableView{  
        NSMutableArray *indexs = [[NSMutableArray alloc] init];  
        for (int i = 0; i < kHeaderTitle.count; i++) {      
            [indexs addObject:kHeaderTitle[i]];  
          }  
          return indexs;
    }

    4.删除操作

    一般这种Cell如果向左滑动右侧就会出现删除按钮直接删除就可以了。其实实现这个功能只要实现代理方法,只要实现了此方法向左滑动就会显示删除按钮。只要点击删除按钮这个方法就会调用。
    -(void)tableView:(UITableView )tableView commitEditingStyle:(UITableViewCellEditingStyle) 
      editingStyle forRowAtIndexPath:(NSIndexPath )indexPath;
    - (void)tableView:(UITableView )indexPath{         if (editingStyle == UITableViewCellEditingStyleDelete) {                     [_titleArray removeObject:_titleArray[indexPath.row]];                     [tableView deleteRowsAtIndexPaths:@[indexPath]                      withRowAnimation:UITableViewRowAnimationBottom];              }  }

    5.导航栏图片拉伸放大

    01
    还是创建控制器,控制器里面创建tableView,初始化其必要的代理方法使能其正常显示.
    02 初始化tableView的时候让tableView向下偏移(偏移下来的那段放图片): _tableView.contentInset = UIEdgeInsetsMake(backGroupHeight - 64000);
    03 初始化图片,注意图片的frame设置,加载在tableView上 imageBg = [[UIImageView alloc] initWithFrame:CGRectMake(0,                     -backGroupHeight, kDeviceWidth, backGroupHeight)]; imageBg.image = [UIImage imageNamed:@"bg_header.png"]; [_tableView addSubview:imageBg];
    04 根据滑动时的偏移量改变图片的frame,改变navigationBar的透明度 - (void)scrollViewDidScroll:(UIScrollView )scrollView{   CGFloat yOffset = scrollView.contentOffset.y;   CGFloat xOffset = (yOffset + backGroupHeight)/2;   if (yOffset < -backGroupHeight) {       CGRect rect = imageBg.frame;       rect.origin.y = yOffset;       rect.size.height = -yOffset;       rect.origin.x = xOffset;       rect.size.width = kDeviceWidth + fabs(xOffset)2;       imageBg.frame = rect;   }   CGFloat alpha = (yOffset + backGroupHeight)/backGroupHeight;   [self.navigationController.navigationBar setBackgroundImage:               [self imageWithColor:[[UIColor orangeColor] colorWithAlphaComponent:alpha]]                forBarMetrics:UIBarMetricsDefault];   titleLb.textColor = [UIColor colorWithRed:255 green:255 blue:255 alpha:alpha]; }
    05 渲染navigationBar颜色方法 - (UIImage )imageWithColor:(UIColor )color{   //描述矩形   CGRect rect = CGRectMake(0.0f0.0f1.0f1.0f);   //开启位图上下文   UIGraphicsBeginImageContext(rect.size);   //获取位图上下文   CGContextRef content = UIGraphicsGetCurrentContext();   //使用color演示填充上下文   CGContextSetFillColorWithColor(content, [color CGColor]);   //渲染上下文   CGContextFillRect(content, rect);   //从上下文中获取图片   UIImage *currentImage = UIGraphicsGetImageFromCurrentImageContext();   //结束上下文   UIGraphicsEndImageContext();   return currentImage; }

    6.刷新界面

       

    No。1
    .刷新整个TableVIew [self.tableView reloadData]; 
 注意:此处reloadData是刷新整个UITableView,有时候,我们可能需要局部刷新。比如:只刷新一个cell、只刷新一个section等等。这个时候在调用reloadData方法,虽然用户看不出来,但是有些浪费资源。 
 NO.
    2
    刷新局部cell NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; [self.tableViewreloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationFade]; 注意:这是刷新第一个section的第一个cell很方便的一种方法,虽然看上去,代码变多了,但是很节省资源,尽量减少刷新频率,这也是在iOS开发中对UITableView的一种优化。
    NO.
    3 局部刷新Section NSIndexSet *indexSet = [[NSIndexSet alloc] initWithIndex:0]; [self.tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationFade]; 上面这段代码是刷新第0个section。
    NO.
    4 刷新动画 刷新UITableView还有几个动画: typedef NS_ENUM(NSInteger, UITableViewRowAnimation) { UITableViewRowAnimationFade, //淡入淡出 UITableViewRowAnimationRight, //从右滑入 // slide in from right (or out to right) UITableViewRowAnimationLeft, //从左滑入 UITableViewRowAnimationTop, //从上滑入 UITableViewRowAnimationBottom, //从下滑入 UITableViewRowAnimationNone, // available in iOS 3.0 UITableViewRowAnimationMiddle, // available in iOS 3.2. attempts to keep cell centered in the space it will/did occupy UITableViewRowAnimationAutomatic = 100// available in iOS 5.0. chooses an appropriate animation style for you };

    在此感谢

                 http://blog.treney.com

    的厚赠;

                http://blog.devtang.com

    解惑之。。。。。。。。。

  • 相关阅读:
    基于.NET平台常用的框架整理
    简单的linq语法
    Newtonsoft.Json高级用法
    C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新)
    HTML URL 编码
    sql(SqlServer)编程基本语法
    正则表达式
    添加vs模板注释
    js实现无刷新表单提交文件,将ajax请求转换为form请求方法
    HTML5 手机端动态适配
  • 原文地址:https://www.cnblogs.com/Biaoac/p/5332312.html
Copyright © 2011-2022 走看看