前言
UITableViewCell的側(cè)滑可以很方便的進行一些操作合愈,比如刪除叮贩、標記等等,有一個很好用的第三方庫SWTableViewCell佛析,可以幫助我們快速實現(xiàn)Cell的左滑和右滑益老,這個庫有詳細的使用說明,這里就不多說了寸莫。但是有些時候捺萌,我們不想只為了某一個界面就導(dǎo)入這么一個庫,我們也可以使用系統(tǒng)自帶實現(xiàn)一些簡單的側(cè)滑膘茎。
效果圖
實現(xiàn)
iOS8之前
在iOS8以前我們可以通過實現(xiàn)UITableView下面的代理方法就可以實現(xiàn)一個簡單的側(cè)滑桃纯,但是這種只能有一個按鈕,比較局限披坏。
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
}
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
return @"刪除";
}
iOS8開始系統(tǒng)提供了UITableViewRowAction
只需要實現(xiàn)下面這個代理方法就可以了态坦,返回的是UITableViewRowAction數(shù)組,可以實現(xiàn)多個按鈕刮萌。
- (nullable NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewRowAction *cancle = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"取消拉黑" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
// do something ...
}];
cancle.backgroundColor = RGBCOLORV(0xdedede);
return @[cancle];
}
注意這里有一個坑驮配!在iOS8上面,只實現(xiàn)這個方法并不能側(cè)滑着茸,還需要加上下面這個方法壮锻,什么都不用實現(xiàn)就可以,這估 這是系統(tǒng)的bug涮阔。
/// fixbug: 在iOS8.3真機上面猜绣,不重寫這個方法,就無法左滑
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
}
如果我們想要修改UITableViewRowAction的字體顏色敬特,可以重寫cell的layoutsubviews
方法
for (UIView *sbv in self.subviews) {
for (UIView *sbv2 in sbv.subviews) {
NSString *class_str = NSStringFromClass([sbv2 class]);
//NSLog(@"class_str = %@", class_str);
if ([class_str rangeOfString:@"UITableViewCellActionButton"].location != NSNotFound) {
for (UIView *v in sbv2.subviews) {
NSString *class_str2 = NSStringFromClass([v class]);
//NSLog(@"class_str2 = %@", class_str2);
if ([class_str2 rangeOfString:@"UIButtonLabel"].location != NSNotFound) {
UILabel *l = (UILabel *)v;
//NSLog(@"label = %@", l);
l.textColor = ; //你想要更改的顏色
l.font = [UIFont systemFontOfSize:16]; //你想要的字體
}
}
}
}
}