在日常開發中我們可能會遇到需要自定義UITableViewCell左滑刪除按鈕的樣式,網上也有許多自定義的第三方,但是都太重量級了,應為我們可能我們的需求很小,也不想大動干戈的導入一個第三方,然后設置各種一大堆屬性,太麻煩了,那么怎么來修改系統自帶的呢?
可能你說不能修改,萬是不是絕對的,我們有神器reveal,作為一名iOS程序猿,如果你連reveal都不知道或不會用的話你就太low了,OK,我們開始我們的黑暗料理.
首先我們來看reveal下UITableViewCell左滑按鈕的層級關系,

我們來看下這是cell左滑狀態下的層級關系
1,cell有兩個subView,一個是UITableViewCellDeleteConfirmationView,這個類我們在xcode中是打不出來也找不出來的,所以大家就別找了
另一個是cell的contentView,這個就是我們常用的cell.contentView,這個就不用說了大家都知道,
我們來分析UITableViewCellDeleteConfirmationView,他是一個view,他的子空間就是我們要找的刪除按鈕,
大家看到_UITableViewCellActionButton這個類別擔心,我們不用管它,我們把他看做UIButton就行了,當做button那就好辦了,想怎么改就怎么改,那么我們怎么拿到這個按鈕呢,且看下面黑暗料理
-(void)modifiDeleteBtn{ for (UIView *subView in self.subviews) { if ([subView isKindOfClass:NSClassFromString(@"UITableViewCellDeleteConfirmationView")]) { subView.backgroundColor=kColorBlue; for (UIButton *btn in subView.subviews) { if ([btn isKindOfClass:[UIButton class]]) { btn.backgroundColor=kColorBlue; } } } } }
遍歷子控件就找到了
然后想怎么改就怎么改,
這段代碼我們要在
layoutSubviews里調用,才能遍歷出來
這個
UITableViewCellDeleteConfirmationView的寬度我們怎么控制呢,

-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{ return @"刪除哈哈哈哈哈"; }
在tableView的這個代理里面控制,然后在cell內部控制我們按鈕要顯示的title,也可以設置image,也可以把它給remove調,添加我們自己定義的view啊什么的,
刪除按鈕是添加在
UITableViewCellDeleteConfirmationView 這個類對應的view上面的,所以大家添加的時候也添加到他上面,布局大小就按他的frame來設置,也可以添加約束.有興趣的同學試試
好了今天的黑暗料理就結束了
