iOS 关于UITabVIew刷新的几种方法(针对初学者)

 

UITableView控件是项目中使用率非常高的一个控件,下面讲解一下关于该控件刷新数据的几个常用方法

 

1、数据的刷新

(1)全局刷新表格,这种方法会将屏幕中显示的所有的cell全部刷新一遍,同时也会更新数组的个数
    [self.tableView reloadData];
    
(2)刷新局部的表格
    不管哪种方法,都要定义一个数组,数组里面存放《NSIndexPath》元素,用来控制需要局部刷新的是哪一个cell
    下面的indexPaths数组元素表示是存放的是第0组第0行
    NSArray *indexPaths = @[[NSIndexPath indexPathForRow:0 inSection:0]];
    
    局部刷新——不改变”数据源个数的情况
    *withRowAnimation:刷新动画的枚举,暂时设置为无动画,用户可根据需要自己设置
    [self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
    
    局部刷新——增加”数据源个数的情况
    *withRowAnimation:刷新动画的枚举,暂时设置为无动画,用户可根据需要自己设置
    [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
    
    
    局部刷新——减少”数据源个数的情况
    *withRowAnimation:刷新动画的枚举,暂时设置为无动画,用户可根据需要自己设置
    [self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];

 

如图所示:

 

备注:不管是使用全局刷新还是局部刷新,必须要修改数据源中的模型必须要修改数据源中的模型必须要修改数据源中的模型

不然即便执行刷新之后界面上的cell发生改变,但是在滚动表格,使当前cell复用的时候,数据依然是原来的数据!

 

 

 

2、左划删除功能

仅需要实现以下两个代理方法即可

#pragma mark UITableView的代理方法,实现左划删除功能
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    
    设置要删除的数据源
    [self.courseListAttay removeObjectAtIndex:indexPath.row];
    
    局部刷新表格
    [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
}

#pragma mark 将系统默认左划弹出的按钮文字@“delete”修改为@“删除”
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {
    return @"删除";
}

如图所示

 

 

3、cell左划出现多个按钮功能

// 调用下面方法即可实现该功能

- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    // 删除按钮(准确的说不是按钮,是“UITableViewRowAction”);
    UITableViewRowAction *delete = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"删除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
        
        // 1、UITableViewRowAction可以通过backgroundColor属性设置不同的背景色

     例如delete.backgroundColor = [UIcolor redColor]; --->删除按钮的背景色就会变成红色,同时“rowrowActionWithStyle”选择为“UITableViewRowActionStyleDefault”也会默认为红色。
        // 2、在此block块中执行删除的相关操作,然后在调用服务器的接口,告诉服务器将对应的数据删除
        [self.dataSource removeObjectAtIndex:indexPath.row];
        [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];      
    }];
    
    // 收藏按钮(准确的说不是按钮,是“UITableViewRowAction”);
    UITableViewRowAction *collection = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"收藏" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
        // 在此block块中执行收藏的相关操作

    // UITableview有一个编辑模式的功能,即editing属性,将该属性默认为NO状态,便会以动画的效果退出2个按钮的状态
        self.tableView.editing = NO;
    }];
    
    // 数组中元素的顺序决定显示的位置,可参照下方的示例图
    return @[
             delete,collection
             ];
}

 

代码图:

 

效果图:

 

 

希望该文章能对您有所帮助~

posted @ 2016-11-02 16:06  斯文小书生  阅读(1235)  评论(0编辑  收藏  举报