开发的时候,经常会遇到各式各样的问题,一般而言我们都是跟随着UI的步子开始进行画画,例如tableView 左滑删除按钮,有时候我们用的是系统自带的删除(如:淘宝的左滑),但是如果系统提供的根本满足不了需求,那么如何是好呢?请听我娓娓道来。请继续往下看。
例如:淘宝的左滑
需求:
实现的效果:
看到Cell上有这个视图,那就一定能找的到
我们在tableView的点击删除的代理方法 里边遍历cell的子视图
// 编辑样式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewCellEditingStyleDelete;
}
// 点击删除的代理方法
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
for (UIView * view cell.subviews) {
NSLog(@"%@", view);
}
}
那么问题来了。UITableViewCellDeleteConfirmationView为啥要在要在tableView的点击删除的代理方法里边找??
原因分析:
当删除按钮没有显示的情况下,cell子视图里是没有这个视图的,可以肯定是在左滑的时候系统把它加上去的,我们可重写cell的 insertSubview:atIndex: 这个方法,当添加 delete view 的时候,会进这个方法,那么可以在此方法中对它进行修改。
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index {
[super insertSubview:view atIndex:index];
if ([view isKindOfClass:NSClassFromString(@"UITableViewCellDeleteConfirmationView")]) {
view.top = 10;
view.height = self.height - 10;
for (UIButton *btn in view.subviews) {
if ([btn isKindOfClass:[UIButton class]]) {
[btn setBackgroundColor:[UIColor colorWithHexString:@"F2F2F2"]];
[btn setTitle:nil forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:@"list_deleting"] forState:UIControlStateNormal];
[btn setTintColor:[UIColor whiteColor]];
}
}
}
}
之前又在网上看到有这么一位大神的文章,文章链接点我,为此还花钱买了这位大神写的电子版的书籍,不得不说 代码写的贼6,但是我发现我如此继承他,那么上拉的时候就不行了,就不能拉了。可能是他里面的做了什么,看到那里面的各种算,我整个都懵逼了。这麻蛋得改到猴年马月呀。
作者实现效果
放在我们项目中出现的问题,不能往上拽了。就貌似tableView高度写死了一样。其实代码并没有这样干。
附上demo:
请使劲戳我