¿Alguien sabe la diferencia entre NSIndexpath.row
y NSIndexpath.item
?
Específicamente, cuál uso en:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
Respuestas:
De acuerdo, nadie ha dado una buena respuesta aquí.
Dentro de NSIndexPath, los índices se almacenan en una matriz c simple llamada "_indexes" definida como NSUInteger * y la longitud de la matriz se almacena en "_length" definida como NSUInteger. La "sección" del descriptor de acceso es un alias de "_indexes [0]" y tanto el "elemento" como la "fila" son alias de "_indexes [1]". Por tanto, los dos son funcionalmente idénticos.
En términos de estilo de programación, y quizás la cadena de definición, sería mejor usar "fila" en el contexto de tablas y "elemento" en el contexto de colecciones.
indexPath.row is best in your case
Primera información sobre NSIndexPath
La NSIndexPath
clase representa la ruta a un nodo específico en un árbol de colecciones de matrices anidadas. Esta ruta se conoce como ruta de índice.
Cada índice en un indexPath representa el índice en una matriz de elementos secundarios de un nodo en el árbol a otro nodo más profundo.
Por ejemplo , indexPath 1.4.3.2 especifica la ruta que se muestra en la Figura
Aquí, en su caso, indexPath.row
devuelve el índice de la fila en el específico indexPath
.
Diferencias entre indexPath.row and indexPath.item
Generalmente indexPath
tiene dos propiedades
1 - fila
2 - artículo
fila: uso de la propiedad con UITableView
para obtener una base de fila específica en indexPath. también es propiedad de solo lectura
Available in iOS 2.0 and later.
item: se usa correctamente con UICollectionView
para obtener el elemento en la sección Es una propiedad de solo lectura. Para utilizar esta propiedad, debe declararla en
UICollectionView.h
> Available in iOS 6.0 and later.
NSIndexPath
.
Necesitas usar indexPath.row
La diferencia es que:
indexPath.row es para tableView e indexPath.item es para collectionView .
articulo
Un número de índice que identifica un artículo en una sección de una vista de colección. (solo lectura)
@property (nonatomic, readonly) NSInteger item;
Discusión
La sección en la que se encuentra el artículo se identifica mediante el valor de sección. Disponibilidad
Available in iOS 6.0 and later.
Declarado en UICollectionView.h
fila
Un número de índice que identifica una fila en una sección de una vista de tabla. (solo lectura)
@property(nonatomic, readonly) NSInteger row;
Discusión
La sección en la que se encuentra la fila se identifica mediante el valor de sección. Disponibilidad
Available in iOS 2.0 and later.
Consulte las adiciones de NSIndexPath para obtener más detalles.
La respuesta de @Owen Godfrey es mejor que la respuesta aceptada de @iPatel. Aquí hay una aclaración adicional que no pude incluir en un comentario sobre su respuesta, así que copiaré su respuesta y la agregaré aquí. El crédito pertenece a Owen.
De @Owen Godfrey:
Dentro de NSIndexPath, los índices se almacenan en una matriz c simple llamada "_indexes" definida como NSUInteger * y la longitud de la matriz se almacena en "_length" definida como NSUInteger. El descriptor de acceso "sección" es un alias de "_indexes [0]" y tanto "elemento" como "fila" son alias de "_indexes 1 ". Por tanto, los dos son funcionalmente idénticos.
En términos de estilo de programación, y quizás la cadena de definición, sería mejor usar "fila" en el contexto de tablas y "elemento" en el contexto de colecciones.
La interfaz principal de NSIndexPath se define en NSIndexPath.h. El almacenamiento de los índices está en _indexes, que es una matriz unidimensional privada de NSUInteger. NSIndexPath por sí mismo puede representar cualquier número de dimensiones. Hay dos categorías relevantes en NSIndexPath que amplían la funcionalidad, una de UICollectionView.h "NSIndexPath (UICollectionViewAdditions)" y otra de UITableView.h "NSIndexPath (UITableView)". El de UICollectionView.h agrega la propiedad de solo lectura "item" y los métodos de conveniencia relacionados. El de UITableView.h agrega la propiedad de solo lectura "fila" y métodos de conveniencia relacionados. Sin embargo, ambas propiedades son simplemente contenedores que acceden al valor subyacente en _indexes [1].
Dado que UIKit se vincula con ambas categorías, ambos conjuntos de funciones de conveniencia están siempre disponibles, sin importar en qué lugar del IOS las esté utilizando. Por lo tanto, podría crear un NSIndexPath desde [NSIndexPath indexPathForRow: inSection:] pero recuperar el segundo índice de indexPath.item. El valor subyacente es exactamente el mismo si se accede por indexPath.item o indexPath.row.
Estilísticamente, es más limpio si usa "item" con UICollectionView y "row" con UITableView, ya que así es como estaban destinados a usarse, y esto hace que el código sea más legible. Sin embargo, su programa no se bloqueará si los intercambia.
Referencia: NSIndexPath
Mire en la parte inferior de UICollectionView.hy verá la categoría que extiende NSIndexPath para agregar item
como una propiedad cuando se usa dentro de las instancias de UICollectionView.
Hay una sección similar en la parte inferior de UITableView.h que añade row
y section
propiedades para NSIndexPaths que se utilizan en UITableViews.
Si está intentando acceder a estas propiedades de una instancia de NSIndexPath dentro de una clase y NSIndexPathInstance no cree que estén allí, simplemente importe el encabezado de la clase que las define en la parte superior de su clase y mágicamente podrá acceder estas propiedades.
UICollectionView.h
@interface NSIndexPath (UICollectionViewAdditions)
+ (instancetype)indexPathForItem:(NSInteger)item inSection:(NSInteger)section NS_AVAILABLE_IOS(6_0);
@property (nonatomic, readonly) NSInteger item NS_AVAILABLE_IOS(6_0);
@end
UITableView.h
//_______________________________________________________________________________________________________________
// This category provides convenience methods to make it easier to use an NSIndexPath to represent a section and row
@interface NSIndexPath (UITableView)
+ (instancetype)indexPathForRow:(NSInteger)row inSection:(NSInteger)section;
@property (nonatomic, readonly) NSInteger section;
@property (nonatomic, readonly) NSInteger row;
@end
Para usar estas propiedades dentro de su clase, tendrá que importar la deseada a su clase así:
@import "UIKit/UITableView.h"
Y luego puedes hacer cosas como: myIndexPath.row
y[myIndexPath row]
row
se usa porUITableView
filas; loitem
utilizan lasUICollectionView
células.