iOS UITableView左滑效果

自iOS8开始,TableView支持多个左滑按钮的显示效果。如果只是简单的文字显示效果,只需简单的几行代码即可轻松实现。

1.简单左滑效果

iOS UITableView左滑效果_第1张图片
基础左滑效果.png

实现基本的左滑效果十分简单,只需重写
UITableViewDataSource中的 - (void)tableView: commitEditingStyle: forRowAtIndexPath:方法即可。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (UITableViewCellEditingStyleDelete == editingStyle)
    {
        [self.dataArr removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
    }
}

当然,显示的文字是可以换的,需要重写即可,返回值即为显示的文字。
- (nullable NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath

注意:
1.删除或添加都会回调此方法,故需要UITableViewCellEditingStyleDelete == editingStyle的条件
2.重写此方法会有左滑效果,点击左滑出的按钮则会调用此方法中的内容,默认左滑按钮点击是删除。在手机为中文系统时Delete会自动变为删除字样。
3.对tableview的row进行增加或减少,必须同时对数据源进行改变做到一一对应。
4.如果只需要部分才可以左滑,则需要重写
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;,返回YES表示可以左滑,反之不能左滑。

2.多按钮左滑效果

当需要左滑显示多个按钮时,上面的方法已经不能满足需求了。但是API提供了另一个方法供我们使用(此方法iOS8后才可以使用)。

iOS UITableView左滑效果_第2张图片
多按钮左滑效果.png

此时只需重写
- (NSArray *)tableView: editActionsForRowAtIndexPath:

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewRowAction *action1 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"第一个" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) 
    {
        //删除一行
        [self.dataArr removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
    }];

    action1.backgroundColor = [UIColor greenColor];

    UITableViewRowAction *action2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"Second" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath)
    {
        //什么都不做,恢复原样
        [tableView setEditing:NO animated:YES];
    }];

    action2.backgroundColor = [UIColor orangeColor];

    return @[action1,action2];
}  

注意:
1.当重写此方法时commitEditingStyle以及titleForDeleteConfirmationButtonForRowAtIndexPath不会被调用。故实现此方法后,其他方法不必实现。
2.若不需要删除某行,只需恢复原样,调用[tableView setEditing:NO animated:YES];即可。因为左滑后,tableView的editing会自动变为YES。
3.UITableViewRowAction只有一些简单属性可以设置,比如背景颜色backgroundColor
4.返回的数组中,越靠前的元素显示越靠右。
5.显示的宽度和字数会自动适配,不需调整。

你可能感兴趣的:(iOS UITableView左滑效果)