【问题标题】:wait till UITableView finish reloadData [duplicate]等到 UITableView 完成 reloadData [重复]
【发布时间】:2011-09-23 08:51:56
【问题描述】:

可能重复:
Get notified when UITableView has finished asking for data?

是否可以在 tableview 完成 reloadData 方法后重新加载其数据时收到通知?还是可以等到tableview完成重新加载?

谢谢

【问题讨论】:

    标签: objective-c multithreading uitableview tableview


    【解决方案1】:

    有一个非常简单的解决方案是检查你是否在委托的最后一次迭代中

    -(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
    

    在最后一次迭代完成后添加你的代码

    -(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if([indexPath row] == lastRow){
              any code you want
    
        }
    }
    

    谢谢

    【讨论】:

    • 谢谢,稍加修改即可使用。
    • 您考虑过以下几点吗? 1) 根据UITableView 的文档,当reloadData 被调用时,“表格视图只重新显示那些可见的行”。所以有可能tableView:willDisplayCell: 不会在最后一行被调​​用。 2)即使与这个问题无关,如果表格视图有页脚,它可能会在单元格加载后加载。此外,reloadData 在加载页脚后可能会做更多的事情,在这种情况下,我们不会确切地知道 reloadData 何时完成。
    • 当底行不可见时如何处理这个问题,因为它仍然不在屏幕上并且没有页脚。我的视图只有 10 行,实际上有 20 行(所以屏幕外有 10 行)。我想滚动到底部。
    【解决方案2】:

    让我们放入一个完成块。谁不喜欢一个块?

    @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
                                            }];
    

    编辑:

    请注意,以上只是解决方案的一半。部分和行数以及行高在主线程上同步更新,所以使用上面的代码,完成会在一些 UI 部分完成时回调。但是从数据源加载数据是异步的——所以这个答案真的不是@Michal 想要的。

    【讨论】:

    • 这不是和等待reloadData 完成一样的问题吗?问题是表的更新是异步发生的,并且会在[super reloadData] 完成后继续。
    • 是的,你是对的。部分和行数和行高是同步更新的,所以部分调用是同步的。但是从数据源加载数据是异步的。我会更新我的答案,以免误导他人。
    • 最佳解决方案...谢谢哥们
    猜你喜欢
    • 1970-01-01
    • 2013-04-10
    • 2020-01-07
    • 2018-07-21
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多