美文网首页iOS Developer
iOS UITableView左滑效果

iOS UITableView左滑效果

作者: 圆脸黑猫警长 | 来源:发表于2016-12-12 17:51 被阅读1798次

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

    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后才可以使用)。

    多按钮左滑效果.png
    此时只需重写
    - (NSArray<UITableViewRowAction *> *)tableView: editActionsForRowAtIndexPath:
    - (NSArray<UITableViewRowAction *> *)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左滑效果

        本文链接:https://www.haomeiwen.com/subject/aemmmttx.html