¿Alguien sabe la diferencia entre NSIndexpath.row
y NSIndexpath.item
?
Específicamente, cuál uso en:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
ios
uitableview
nsindexpath
Cyberpass
fuente
fuente
row
se usa porUITableView
filas; loitem
utilizan lasUICollectionView
células.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.
fuente
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íficoindexPath
.Diferencias entre
indexPath.row and indexPath.item
Generalmente
indexPath
tiene dos propiedadesfila: uso de la propiedad con
UITableView
para obtener una base de fila específica en indexPath. también es propiedad de solo lecturaitem: 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 enUICollectionView.h
> Available in iOS 6.0 and later.
fuente
NSIndexPath
.Necesitas usar
indexPath.row
La diferencia es que:
indexPath.row es para tableView e indexPath.item es para collectionView .
Consulte las adiciones de NSIndexPath para obtener más detalles.
fuente
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
fuente
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
ysection
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]
fuente