3

UITableView*myTableViewのivarがあります。インターネットからデータを読み込んでいるので、データが読み込まれたときに[myTableView setNeedsDisplay]を呼び出す必要がありますが、[myTableView reloadData]を呼び出すことができるか、呼び出す必要があることはわかっていますが、setNeedsDisplayの呼び出しも機能するはずですが、機能していません。

setNeedsDisplayが何をするのかについての説明を探していますか?UITableViewインスタンスで呼び出されたとき。

ドキュメントによると、setNeedsDisplayは「次の描画サイクル」でdrawRectを呼び出します。だから、誰もが次の描画サイクルは何であるかを教えてもらえますか?

4

5 に答える 5

6

setNeedsDisplayメソッドは、 tableViewのリロードとは何の関係もありません。セルセパレータではなくviewtableViewのを再描画するだけです。

setNeedsDisplayreloadDataは、まったく異なる目的のためのものです。

于 2011-08-26T12:16:49.313 に答える
5

setNeedsDisplayUIView再描画が必要であると呼び出しをマークすることは、純粋に視覚的な意味であり、前述のように、次の描画サイクルで発生します。

UITableViewこれは、コンテキストで使用されたときにデータをリロードすることとはまったく異なります。

このテーマの詳細については、この記事を参照してください。

于 2011-08-26T12:17:13.733 に答える
2

SetNeedsDisplay

この良い例は、UIImageViewが1つの画像でレンダリングされる場合です。画面に表示されている間に、画像を別の画像に変更します。この場合、画像を変更するだけでは、必ずしもビューの再描画がトリガーされるとは限りません。そのためには、を呼び出す必要がありますsetNeedsDisplay

reloadData

テーブルビューの基になるデータソースが変更され、それをUIに反映させたい場合に呼び出す必要があります。その場合は、この方法を呼び出しますreloadData

于 2013-08-02T04:57:42.670 に答える
1

通常、drawRectを実装したカスタムビューでsetNeedsDisplayを呼び出すだけで済みます。

于 2011-08-26T15:32:46.790 に答える
0

私の解決策は、表示されているすべてのセルを更新し、reloadRowsAtIndexPathsを使用してカスタムクラス「ProductTableViewCell」のセルのindexPathを追跡することでした。以下を参照してください。

NSArray *arrayCells = [self.tableView visibleCells];
NSMutableArray *mArrayIndexPaths = [[NSMutableArray alloc] init];
for(ProductTableViewCell *cell in arrayCells) {
    [mArrayIndexPaths addObject:cell.indexPath];
}

[self.tableView beginUpdates];
[self.tableView endUpdates];
[self.tableView reloadRowsAtIndexPaths:[mArrayIndexPaths copy] withRowAnimation:UITableViewRowAnimationAutomatic];

クラスの定義方法は次のとおりです。

@interface ProductTableViewCell : UITableViewCell {
    NSString *reuseID;
}

@property (nonatomic, strong) NSIndexPath *indexPath;
于 2016-04-26T07:07:45.500 に答える