web-dev-qa-db-ja.com

NSIndexSetの使用方法

Objective-Cでは、私のプログラムはウィンドウを開き、テーブルを表示します。表の指定された行を強調表示したい。

どうすればいいですか?

私はコードが必要なようです

[myTableView selectRowIndexes:(NSIndexSet *) byExtendingSelection:(BOOL)];

開発者のドキュメントを見て、BOOLがNOであることを理解しました。

NSIndexSetのドキュメントを見ると、正しい構文がどうあるべきかわかりません。

29
hertopnerd

それは適切な方法でしょう:

NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 3)];

または、ランダムインデックスにNSMutableIndexSetを使用できます。

NSMutableIndexSet *mutableIndexSet = [[NSMutableIndexSet alloc] init];
[mutableIndexSet addIndex:0];
[mutableIndexSet addIndex:2];
[mutableIndexSet addIndex:9];

等.

74
holex

デバッガーでNSIndexSetを印刷すると、それらが内部的にNSRangesであることがわかります。範囲を作成するには、範囲または単一の明示的なインデックス(範囲の作成元)を指定できます。何かのようなもの

NSIndexSet *indexes = [[NSIndexSet alloc] initWithIndex:rowToHighlight];
[myTableView selectRowIndexes:indexes byExtendingSelection:NO];
[indexes release];

インデックスはすべて符号なし整数(NSUIntegers、具体的には)でなければならないことに注意してください。

5
Richard

ファクトリメソッドを使用して、メモリを管理する必要を回避します。

[myTableView selectRowIndexes:[NSIndexSet indexSetWithIndex:indexes] 
         byExtendingSelection:NO];
4
Paul Schreiber

私はコードが必要なようです

[myTableView selectRowIndexes:(NSIndexSet *) byExtendingSelection:(BOOL)];

番号;これらはキャストするものが何もないキャストであり、無効です。

キャストを削除し、代わりに値を入れてください。

開発者のドキュメントを見て、BOOLNOである必要があることがわかりました。

はい、選択範囲を拡張したくないので、置き換えます。

NSIndexSetのドキュメントを見ると、正しい構文がどうあるべきかわかりません。

他の変数またはメッセージ式を渡す場合と同じです。

インデックスセットを作成し、それを変数に格納して渡すか、作成メッセージの結果を直接渡す必要があります。

0
Peter Hosey