tableView reloadData 刷新结束后再执行后续操作

[self.tableView reloadData]并不会等待tableview更新结束后才执行后续代码,而是立即执行后续代码

做个试验:

代码如下

@interface ViewController ()

@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSArray *dataArr;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.title = @"ViewController";
    [self buildView];
    [self loadData];
}

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    
    NSLog(@"----->111111");
    [self.tableView reloadData];
//把下句注释掉
//    [self.tableView layoutIfNeeded];
    NSLog(@"----->4444");
}

- (void)buildView{
    [self.view addSubview:self.tableView];
}

- (void)loadData{
    self.dataArr = @[@"实验一些概念", @"绘制时钟", @"创建平移/缩放/旋转动画", @"笑脸", @"心跳", @"关键帧动画", @"mask遮罩", @"扇形菜单"];
}

#pragma mark -
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return self.dataArr.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    NSLog(@"----->22222");

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class]) forIndexPath:indexPath];
    
    cell.textLabel.text = [self.dataArr objectAtIndex:indexPath.row];
    
    NSLog(@"----->33333");

    return cell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

#pragma mark -懒加载
-(UITableView *)tableView{
    if (!_tableView) {
        _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, WGWIDTH, WGHEIGHT) style:UITableViewStylePlain];
        _tableView.backgroundColor = [UIColor whiteColor];
        _tableView.delegate = self;
        _tableView.dataSource = self;
        [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:NSStringFromClass([UITableViewCell class])];
    }
    return _tableView;
}

-(NSArray *)dataArr{
    if (!_dataArr) {
        _dataArr = [[NSArray alloc] init];
    }
    return _dataArr;
}

结果:

虽然都在主线程上执行,但是执行顺序并不是1、2、3、4
而是:1,4,2,3
满足不了向tableview刷新结束在执行后续操作的需求

解决:在[self.tableView reloadData];后面添加
[self.tableView layoutIfNeeded];

结果:解决问题

你可能感兴趣的:(tableView reloadData 刷新结束后再执行后续操作)