2010-12-19 6 views
27

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

どうすればよいですか?

私は開発者向けドキュメントを見て、とBOOLはNOであることを考え出しコード

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

を必要としているようです。

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

答えて

5

デバッガでNSIndexSetを印刷すると、内部的にはNSRangeと表示されます。作成するには、範囲または単一の明示的なインデックス(範囲を作成する)を指定します。インデックス(複数可)は、すべての符号なし整数(NSUIntegers、特異的に)でなければならないことを

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

ノートのようなもの。

+2

インデックスセットは、必ずしも単一の連続ではありません範囲。単一のインデックスまたは範囲で不変のインデックスセットを作成することはできますが、可変インデックスセットを使用して、0個以上の単一インデックスと0個以上の範囲の任意の組み合わせをカバーするインデックスセットを作成することができます。カスタマイズされた索引セットの不変のコピーを作成できます。 –

+0

絶対に;私は具体的には、それらが複数形で内部的にNSRangesであると言った。 – Richard

4

私はメモリを管理することを避けるためにファクトリメソッドを使用したい:

[myTableView selectRowIndexes:[NSIndexSet indexSetWithIndex:indexes] 
     byExtendingSelection:NO]; 
+2

-1とは何ですか? –

0

私はコード

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

ありませんが必要なように見えます。それらはキャストするものがないキャストであり、無効です。

キャストを削除して代わりに値を入力します。

私は開発者のドキュメントを見て、BOOLNOであるはずだと分かりました。

はい、選択範囲を拡張しないため、置き換える必要があります。

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

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

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

+0

re:キャストすることなくキャスティング:Xcodeが生成するプレースホルダコードをコピー(または視覚的に複製)していたと思います。 – Richard

72

それが適切な方法のようになります。

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

か、ランダムインデックスにNSMutableIndexSetを使用することができます。

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

など

+1

NSMakeRange()を使用する場合は+1してください。本能は 'NSRangeMake()'のようなものを探すことです。残念ながらそれは存在しません。 –

+8

親愛なる**ダウン投票者**!なぜあなたの手がダウン投票者ボタンの上を揺り動かしていたのかについてのフィードバックを得ることを光栄に思うでしょう。あなたが信じているか否かにかかわらず、私はそれを理解する読者ではないからです。ありがとうございました! – holex