UITableViewCell 编辑状态修改系统红色删除按钮图片

2018-05-08  本文已影响42人  嗯哎嘶唠咯

问题

今天尝试修改系统的编辑样式达到UI设计师们要的效果:


最终效果 而系统自带的删除按钮是红色实心儿的: 系统删除按钮

处理过程

想都不带想的,修改系统删除按钮的图片就行了,需要实现layoutSubviews方法:

- (void)layoutSubviews
{
    for (UIControl *control in self.subviews){
        if ([control isMemberOfClass:NSClassFromString(@"UITableViewCellEditControl")]){
            for (UIView *v in [[control.subviews reverseObjectEnumerator] allObjects])
            {
                if ([v isKindOfClass: [UIImageView class]]) {
                    UIImageView *img=(UIImageView *)v;
                    img.image = [UIImage imageNamed:@"login_icon_click_account_change_delete_minus"];
                    img.backgroundColor = [UIColor whiteColor];
                }
                break;
            }
        }
    }
    [super layoutSubviews];
}

洋洋洒洒数行代码,顺手command + R,准备欣赏自己的实现,but,重点来了:


QQ20180508-223038.gif

黑人问号脸!!!what ?! 还有这等骚操作的么?我的白底儿图片怎么又变成红色实心儿的图片了?

继续跟程序正面刚🛠,在点击左侧删除按钮的时候,会走这个方法,所以我在此处打了个断点

- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return @"删除";
}
看到了函数调用栈: 调用栈

此处,红色直线标记出来的方法引起了我的注意:editControlWasClicked系统怕是在这个方法里面做了某些骚操作啊。

思考再三,只有最后一种办法了,只能在editControlWasClicked之后调用的- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath方法里面重新让cell布局一次了:

- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
    HsAccountTableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setNeedsLayout];
    return @"删除";
}

结果

想要的效果确实是实现了,但还是觉得布局cell 的时机 和 方式都有些欠妥,若有幸被大佬看到并且有更好的方法,请一定告知,O(∩_∩)O谢谢!

上一篇下一篇

猜你喜欢

热点阅读