ios - NSIndexpath.item vs NSIndexpath.row
uitableview (5)
¿Alguien sabe la diferencia entre NSIndexpath.row
y NSIndexpath.item
?
Específicamente, ¿cuál uso en:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
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 "elemento" como "fila" son alias de "_indexes [1]". Por lo tanto, los dos son funcionalmente idénticos.
En términos de estilo de programación, y quizás de cadena de definición, sería mejor usar "fila" en el contexto de tablas, y "elemento" en el contexto de colecciones.
La respuesta de @Owen Godfrey es mejor que la respuesta aceptada de @iPatel. Aquí hay algunas aclaraciones adicionales que no pude incluir en un comentario sobre su respuesta, así que copiaré su respuesta y la añadiré 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. La "sección" del descriptor de acceso es un alias de "_indexes [0]" y tanto "elemento" como "fila" son alias de "_indexes 1 ". Por lo tanto, los dos son funcionalmente idénticos.
En términos de estilo de programación, y quizás de 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 _índices, que es una matriz privada unidimensional de NSUInteger. NSIndexPath en sí mismo puede representar cualquier cantidad de dimensiones. Hay dos categorías relevantes en NSIndexPath que extienden la funcionalidad, una de UICollectionView.h "NSIndexPath (UICollectionViewAdditions)" y una de UITableView.h "NSIndexPath (UITableView)". El de UICollectionView.h agrega la propiedad de solo lectura "elemento" y los métodos de conveniencia relacionados. El de UITableView.h agrega la propiedad de "fila" de solo lectura y los métodos de conveniencia relacionados. Sin embargo, ambas propiedades son solo envoltorios 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 los esté utilizando. De modo que 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 accede por indexPath.item o indexPath.row.
Estilísticamente, es más claro si usa "elemento" con UICollectionView y "fila" con UITableView, ya que así es como estaban destinados a ser utilizados, y esto hace que el código sea más legible. Sin embargo, su programa no se bloqueará si los intercambia.
Referencia: 1
Mire la parte inferior de UICollectionView.h y verá la categoría que extiende NSIndexPath para agregar el 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 agrega propiedades de row
y section
para NSIndexPaths que se utilizan en UITableViews.
Si intenta acceder a estas propiedades de una instancia NSIndexPath dentro de una clase y NSIndexPathInstance no cree que estén allí, solo importe el encabezado de la clase que las define en la parte superior de su clase y podrá acceder mágicamente 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 que desee a su clase de la siguiente manera:
@import "UIKit/UITableView.h"
Y luego puedes hacer cosas como: myIndexPath.row
y [myIndexPath row]
Necesitas usar indexPath.row
La diferencia es que:
indexPath.row es para tableView y indexPath.item es para collectionView .
ít
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 por el valor de la 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 por el valor de la sección. Disponibilidad
Available in iOS 2.0 and later.
Por favor, consulte las Adiciones NSIndexPath para más detalles
indexPath.row is best in your case
Primera información sobre NSIndexPath
La clase NSIndexPath
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 indexPath
específico.
Diferencias entre indexPath.row and indexPath.item
Generalmente indexPath
tiene dos propiedades
1 - fila
2 - artículo
fila - uso de 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.
elemento: usar correctamente con UICollectionView
para obtener el elemento en la sección. Es una propiedad de solo lectura. Para usar esta propiedad, debe declararla en
UICollectionView.h
> Available in iOS 6.0 and later.