为了账号安全,请及时绑定邮箱和手机立即绑定

UITableView完成查询数据后会收到通知吗?

UITableView完成查询数据后会收到通知吗?

iOS
梵蒂冈之花 2019-12-13 10:18:34
有什么方法可以找出何时UITableView从其数据源中查询数据?的无viewDidLoad/ viewWillAppear/ viewDidAppear关联的视图控制器(方法UITableViewController)是使用在这里,因为他们都火得太早。它们中的一个(完全可以理解)不能保证对数据源的查询暂时已经完成(例如,直到视图滚动为止)。一个解决办法,我发现是调用reloadData的viewDidAppear,因为当reloadData返回时,表视图是保证完成查询数据源,它更需要的时间存在。但是,这似乎有点令人讨厌,因为我认为这会导致在reloadData首次加载数据源时两次(自动一次,由于调用而一次)要求输入相同的信息。我要这样做的原因是我想保留-的滚动位置,UITableView但要一直到像素级别,而不仅仅是到最近的行。当恢复滚动位置(使用scrollRectToVisible:animated:),我需要的表视图已经有足够的数据在里面,否则scrollRectToVisible:animated:方法调用什么也不做(这是如果你把它自己的呼叫任何会发生什么viewDidLoad,viewWillAppear或viewDidAppear)。
查看完整描述

3 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

由于自编写答案以来对UITableView实现进行了一些更改,因此该答案似乎不再有效。看到这个评论:UITableView完成请求数据时得到通知?


我一直在玩这个问题困扰了几天,觉得子类UITableView的reloadData是最好的方法:


- (void)reloadData {


    NSLog(@"BEGIN reloadData");


    [super reloadData];


    NSLog(@"END reloadData");


}

reloadData在表重新加载其数据之前不会结束。因此,当第二个NSLog被触发时,表视图实际上已经完成了对数据的查询。


我已经细分UITableView为在之前和之后将方法发送给委托reloadData。它像一种魅力。


查看完整回答
反对 回复 2019-12-13
?
ibeautiful

TA贡献1993条经验 获得超5个赞

这个答案实际上不是解决方案。起初它似乎起作用了,因为重新加载可能很快发生,但是实际上,在数据完全完成重新加载之后,不一定会调用完成块-因为reloadData不会阻止。您可能应该寻找更好的解决方案。


为了扩展@Eric MORAND的答案,让我们输入一个完成代码块。谁不喜欢一个代码块?


@interface DUTableView : UITableView


   - (void) reloadDataWithCompletion:( void (^) (void) )completionBlock;


@end

和...


#import "DUTableView.h"


@implementation DUTableView


- (void) reloadDataWithCompletion:( void (^) (void) )completionBlock {

    [super reloadData];

    if(completionBlock) {

        completionBlock();

    }

}


@end

用法:


[self.tableView reloadDataWithCompletion:^{

                                            //do your stuff here

                                        }];


查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 633 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信