亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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條經驗 獲得超6個贊

這個答案實際上不是解決方案。起初它似乎起作用了,因為重新加載可能很快發生,但是實際上,在數據完全完成重新加載之后,不一定會調用完成塊-因為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 關注
  • 701 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號