2010-10-04 10 views
17

Necesito mostrar 6 vistas y cada vista debe mostrar 20 elementos (UIButtons). Tengo un gran NSArray que contiene los artículos para las 6 vistas.Extraiga un rango de NSArray

Por ejemplo, la vista 1 debe ser los elementos 0-19, la vista 2 debe ser los elementos 20-39.

¿Cómo extraería el rango relevante de la matriz? Tal vez el uso de NSRange con una longitud de 20, pero la ubicación de inicio tendría que cambiar para cada vista ... sin una sentencia switch idealmente :)

Gracias

Respuesta

61
static const NSUInteger ItemsPerView = 20; 
NSUInteger startIndex = viewIndex * ItemsPerView; 
NSUInteger count = MIN(completeArray.count - startIndex, ItemsPerView); 
NSArray *itemsForView = [completeArray subarrayWithRange: NSMakeRange(startIndex, count)]; 
+3

Esto puede ocurrir un bloqueo en la última página si hay menos de elementos de kItemsPerView – lefakir

+1

@lefakir la respuesta está arreglada ahora. – Sven

3

su respuesta es en su pregunta. Simplemente haga un seguimiento de qué NSRange pertenece a cada vista y utilícelo para buscar los objetos necesarios en su contenedor utilizando el método de NSArray -subarrayWithRange :.

+0

Todo lo que tengo es un int que representa la vista, entonces hay una mejor manera que 'if (ver == 0) {NSMakeRange (0,20); } else if (ver == 1) ... '? – joec

+0

Tendrá que proporcionar más información. No estoy seguro de lo que estás preguntando aquí. –