UITableView使用01

这里记录一些这几天的研究,关于UITableViewCell的多选主要是下面几点。

1. 主要代码

// 打开tableView的编辑状态
- (IBAction)editAction:(id)sender{
    self.tableView.editing = !self.tableView.editing ;
}

// cell 编辑状态的样式
- (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
   return UITableViewCellEditingStyleInsert | UITableViewCellEditingStyleDelete ;
}
//    UITableViewCellEditingStyleNone   `空白` 预留位置,可以自定义使用
//    UITableViewCellEditingStyleInsert  `插入` 绿地白色加号
//    UITableViewCellEditingStyleDelete; `删除` 红底白色减号
}

2. 普通cell的内部子控件

2.1 普通cell的子控件,一个内容视图和分割线两个子控件

"; layer = >",
"<_UITableViewCellSeparatorView: 0x7f9c2af4dd10; frame = (15 44.5; 360 0.5); layer = >"

2.2 开启cell的编辑模式edit时,多了一个UITableViewCellEditControl控件,这个控件并不是cell自己添加的,通过两次切换编辑状态,就会发现UITableViewCellEditControl对象是不固定的,也就是系统添加到cell上的,也只是在可见的cell上添加,这应该是系统提供的优化方式。通过运行时查看cell的属性列表时也是找不到这个属性的。

"; layer = >",
"<_UITableViewCellSeparatorView: 0x7f9c2af4dd10; frame = (15 44.5; 360 0.5); layer = >",
">"

"; layer = >",
"<_UITableViewCellSeparatorView: 0x7f9c2af4dd10; frame = (15 44.5; 360 0.5); layer = >",
">"

2.3 选中cell时多了一个UITableViewCellSelectedBackground

">",
"; layer = >",
"<_UITableViewCellSeparatorView: 0x7f9c2af4dd10; frame = (15 44.5; 360 0.5); alpha = 0; layer = >"

2.4 编辑状态cell选中,和上面的规律一致。

">",
"; layer = >",
"<_UITableViewCellSeparatorView: 0x7f9c2af4dd10; frame = (15 44.5; 360 0.5); layer = >",
">"

2.5 就 2.2的日志可以看出来,没有必要缓存或者引用UITableViewCellEditControl对象,自定义编辑样式可以使用下面的

- (void)layoutSubviews{
    [super layoutSubviews];
    NSLog(@"==%@==",self.subviews);
    for (UIControl *uic in self.subviews) {
        if ([uic isKindOfClass:NSClassFromString(@"UITableViewCellEditControl")]) {
            if (self.isSelected) {
                [uic setValue:[UIImage imageNamed:@"select_status"] forKeyPath:@"_imageView.image"];
            }else{
                [uic setValue:[UIImage imageNamed:@"deslect_status"] forKeyPath:@"_imageView.image"];
            }
        }
    }
}

这里强调两点,一调用[super layoutSubviews];,二使用[setValue: forKeyPath]可以_imageView.image设置属性值,比[setValue:forKey]代码量少,没有必要设置对象引用。

3. 通过运行时查看一个类的属性

导入头文件#import

- (NSArray *)propertys{
   unsigned int count = 0;
    //获取属性的列表,并不会访问父类的属性列表
    objc_property_t *propertyList =  class_copyPropertyList([UITableViewCell class], &count);
    NSMutableArray *propertyArray = [NSMutableArray array];
    for(int i=0;i

你可能感兴趣的:(UITableView使用01)