完成块后调用CellForRow

时间:2015-02-19 21:20:17

标签: ios swift

我有一个功能,可以上网并下载数据然后放入TableViewCell。

我的问题是,在应用程序从网络上获取数据之前,正在调用CellForRow委托方法。

那么在我从网上获取数据后如何调用CellForRow委托方法呢?

4 个答案:

答案 0 :(得分:1)

你的功能是否有正确的完成块?听起来发生的事情是你同步调用cellForRow,而被发送下载的过程是异步的。我怀疑你的代码看起来像这样:

// ...
[self downloadMethod];
[self cellDelegateCall];
// ...

系统不知道downloadMethod将要花多长时间,因此它会立即执行cellDelegateCall。你需要的是一个适当的完成块:

// ...
[self downloadMethodWithCompletion:^(BOOL successful) {
    if (successful) {
        [self cellDelegateCall];
    }
}];
// ...

熟悉编写自己的块可能会让人感到困惑。 This website是一个很好的资源。即使经过几年的写作,我仍然会不时地查看它。希望这有帮助!

答案 1 :(得分:1)

无需显式调用cellForRow委托,只需在收到数据后重新加载表格视图即可调用cellForRow委托。

Swift 2.3:

    dispatch_async(dispatch_get_main_queue(), { () -> Void in
    self.tableView.reloadData()
     })

斯威夫特3:

    DispatchQueue.main.async{
    self.tableView.reloadData()
    }

答案 2 :(得分:0)

习惯约cellForRow的一件事是你经常不直接调用它。只要知道它会在不同的时间被触发,比如在视图控制器中首次绘制表格时以及表格需要新的单元格时。正如其他人所说,如果你确实需要触发cellForRow,请致电tableView.reloadData()

答案 3 :(得分:0)

从网上下载数据后,您需要在tableView上调用<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="app" ng-controller="ctrl"> <div> <label class="label">Account Number</label> <select id="cboAcctNbr" ng-model="acctNbr" ng-options="valAcct.ID for valAcct in arrIMAcctNbrs" ng-change="acctTyp=acctNbr.type"> </select><br><br> </div> <div> <label class="label">Account Type</label> <select id="cboAcctTyp" ng-model="acctTyp" ng-options="valAcctTyp for valAcctTyp in arrAcctTypes"> </select> </div> </div>