2010-12-19 12 views
27

En Objective-C, mi programa abre una ventana y muestra una tabla. Quiero que se destaque una fila especificada de la tabla.Cómo usar NSIndexSet

¿Cómo puedo hacer esto?

me parecen necesitar el código

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

Miré la documentación para desarrolladores, y la cuenta de que la BOOL debe ser NO.

Al mirar los documentos de NSIndexSet, no puedo entender cuál debería ser la sintaxis correcta.

Respuesta

5

Imprimiendo un NSIndexSet en el depurador le mostrará que están internamente NSRange s. Para crear uno, puede especificar el rango o un único índice explícito (a partir del cual creará el rango); algo así como

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

Tenga en cuenta que el índice (es) debe ser todos los enteros sin signo (NSUIntegers, específicamente).

+2

Un conjunto de índices no es necesariamente una única contigua distancia.Puede crear un conjunto de índices inmutables con un solo índice o con un rango, pero puede usar un conjunto de índices mutables para crear un conjunto de índices que cubra cualquier combinación de cero o más índices individuales y cero o más rangos, y, por supuesto, usted puede hacer una copia inmutable de un conjunto de índices personalizado. –

+0

Absolutamente; Específicamente dije que son internamente NSRanges en plural. – Richard

4

que haría uso de un método de fábrica para evitar tener que gestionar la memoria:

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

¿Qué pasa con el -1? –

0

me parecen necesitar el código

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

n; esos son moldes sin nada que arrojar, que no es válido.

Eliminar los moldes y poner valores allí.

Miré la documentación para desarrolladores, y dado cuenta de que la BOOL debería ser NO.

Sí, porque no desea ampliar la selección, desea reemplazarla.

Al mirar los documentos de NSIndexSet, no puedo entender cuál debería ser la sintaxis correcta.

Igual que para pasar cualquier otra expresión de variable o mensaje.

Necesita crear un conjunto de índices y luego esconderlo en una variable y pasarlo o pasar el resultado del mensaje de creación directamente.

+0

re: fundición sin nada para transmitir: creo que solo estaba copiando (o duplicando visualmente) el código de marcador de posición que genera Xcode. – Richard

72

sería la forma correcta:

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

o se puede utilizar el NSMutableIndexSet para los índices azar:

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

etc.

+1

+1 para usar 'NSMakeRange()'. Instinto es buscar algo como 'NSRangeMake()', que desafortunadamente no existe. –

+8

estimado ** Votantes abajo **! Hubiera sido un honor para mí recibir retroalimentación sobre por qué sus manos temblaban sobre el botón de abajo y eventualmente hacer clic en él, porque - usted cree o no - no soy un lector de ideas para entenderlo. ¡gracias! – holex