開發(fā)的時(shí)候非春,經(jīng)常會(huì)遇到 tableView 左滑刪除按鈕,UI設(shè)計(jì)的是各種各樣的雹食,系統(tǒng)提供的根本滿足不了需求畜普,也不想導(dǎo)入一些第三方的東西,然后各種屬性設(shè)置群叶,太麻煩吃挑,效果也不理想。那怎么來修改系統(tǒng)自帶的呢街立?
先看一下效果
下面進(jìn)入正題:
看到Cell上有這個(gè)視圖舶衬,那就一定能找的到
我們?cè)趖ableView的點(diǎn)擊刪除的代理方法
里邊遍歷cell的子視圖
// 編輯樣式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewCellEditingStyleDelete;
}
// 點(diǎn)擊刪除的代理方法
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
for (UIView * sv in cell.subviews) {
NSLog(@"%@", sv);
}
}
下面看打印信息
有一個(gè)名字叫UITableViewCellDeleteConfirmationView
的類。
為什么我們要在tableView的點(diǎn)擊刪除的代理方法
里邊找赎离,原因看圖
當(dāng)刪除按鈕沒有顯示的情況下逛犹,cell子視圖里是沒有這個(gè)視圖的,可以肯定是在左滑的時(shí)候系統(tǒng)把它加上去的梁剔,我們可重寫cell的
insertSubview:atIndex:
這個(gè)方法虽画,當(dāng)添加 delete view 的時(shí)候,會(huì)進(jìn)這個(gè)方法荣病,那么可以在此方法中對(duì)它進(jìn)行修改码撰。
下面看下它的層級(jí)關(guān)系
UITableViewCellDeleteConfirmationView > _UITableViewCellActionButton
圖中可看到里邊是一個(gè) UIButton 的子類,那么你就可以隨心所欲了
下面來修改它:
// 重寫 insertSubview:atIndex 方法
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index {
[super insertSubview:view atIndex:index];
if ([view isKindOfClass:NSClassFromString(@"UITableViewCellDeleteConfirmationView")]) {
for (UIButton *btn in view.subviews) {
if ([btn isKindOfClass:[UIButton class]]) {
[btn setBackgroundColor:[UIColor orangeColor]];
[btn setTitle:nil forState:UIControlStateNormal];
UIImage *img = [image_name(@"del") imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[btn setImage:img forState:UIControlStateNormal];
[btn setImage:img forState:UIControlStateHighlighted];
[btn setTintColor:[UIColor whiteColor]];
}
}
}
}
OK众雷,運(yùn)行看效果
至此灸拍,系統(tǒng)的刪除按鈕定制完成了!