我有一个功能,可以上网并下载数据然后放入TableViewCell。
我的问题是,在应用程序从网络上获取数据之前,正在调用CellForRow委托方法。
那么在我从网上获取数据后如何调用CellForRow委托方法呢?
答案 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>
。