问题
今天尝试修改系统的编辑样式达到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谢谢!
网友评论