Kennt jemand den Unterschied zwischen NSIndexpath.row
und NSIndexpath.item
?
In welchem Fall verwende ich speziell:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
ios
uitableview
nsindexpath
Cyberpass
quelle
quelle
row
wird vonUITableView
Zeilen verwendet; Dasitem
wird vonUICollectionView
Zellen verwendet.Antworten:
Okay, hier hat niemand eine gute Antwort gegeben.
In NSIndexPath werden die Indizes in einem einfachen c-Array namens "_indexes" gespeichert, das als NSUInteger * definiert ist, und die Länge des Arrays wird in "_length" gespeichert, das als NSUInteger definiert ist. Der Accessor "section" ist ein Alias für "_indexes [0]" und sowohl "item" als auch "row" sind Aliase für "_indexes [1]". Somit sind die beiden funktional identisch.
In Bezug auf den Programmierstil - und möglicherweise die Definitionskette - sollten Sie "Zeile" im Kontext von Tabellen und "Element" im Kontext von Sammlungen verwenden.
quelle
Erste Infos zu NSIndexPath
Die
NSIndexPath
Klasse repräsentiert den Pfad zu einem bestimmten Knoten in einem Baum verschachtelter Array-Sammlungen. Dieser Pfad wird als Indexpfad bezeichnet.Jeder Index in einem indexPath repräsentiert den Index in ein Array von untergeordneten Knoten von einem Knoten im Baum zu einem anderen, tieferen Knoten.
Beispielsweise gibt der indexPath 1.4.3.2 den in Abbildung gezeigten Pfad an
Hier in Ihrem Fall wird
indexPath.row
der Index der Zeile an der spezifischen zurückgegebenindexPath
.Unterschiede zwischen
indexPath.row and indexPath.item
Hat
indexPath
im Allgemeinen zwei Eigenschaftenrow - Eigenschaft, die mit verwendet wird,
UITableView
um eine bestimmte Zeilenbasis auf indexPath abzurufen. Es ist auch eine schreibgeschützte Eigenschaftitem - richtig verwenden,
UICollectionView
um den Artikel im Abschnitt abzurufen . Es ist eine schreibgeschützte Eigenschaft. Um diese Eigenschaft zu verwenden, müssen Sie sie inUICollectionView.h deklarieren
quelle
NSIndexPath
.Sie müssen verwenden
indexPath.row
Der Unterschied ist, dass:
indexPath.row ist für tableView und indexPath.item ist für collectionView .
Bitte überprüfen Sie die NSIndexPath-Ergänzungen für Details
quelle
Die Antwort von @Owen Godfrey ist besser als die akzeptierte Antwort von @iPatel. Hier ist eine weitere Klarstellung, die ich nicht in einen Kommentar zu seiner Antwort einfügen konnte. Deshalb werde ich seine Antwort kopieren und hier ergänzen. Kredit gehört Owen.
Von @Owen Godfrey:
In NSIndexPath werden die Indizes in einem einfachen c-Array namens "_indexes" gespeichert, das als NSUInteger * definiert ist, und die Länge des Arrays wird in "_length" gespeichert, das als NSUInteger definiert ist. Der Accessor "section" ist ein Alias für "_indexes [0]" und sowohl "item" als auch "row" sind Aliase für "_indexes 1 ". Somit sind die beiden funktional identisch.
In Bezug auf den Programmierstil - und möglicherweise die Definitionskette - sollten Sie "Zeile" im Kontext von Tabellen und "Element" im Kontext von Sammlungen verwenden.
Die Kernschnittstelle von NSIndexPath ist in NSIndexPath.h definiert. Die Speicherung der Indizes erfolgt in _indexes, einem privaten eindimensionalen Array von NSUInteger. NSIndexPath selbst kann eine beliebige Anzahl von Dimensionen darstellen. Es gibt zwei relevante Kategorien in NSIndexPath, die die Funktionalität erweitern, eine aus UICollectionView.h "NSIndexPath (UICollectionViewAdditions)" und eine aus UITableView.h "NSIndexPath (UITableView)". Die von UICollectionView.h fügt die schreibgeschützte Eigenschaft "item" und zugehörige Convenience-Methoden hinzu. Die von UITableView.h fügt die schreibgeschützte Eigenschaft "row" und zugehörige Convenience-Methoden hinzu. Beide Eigenschaften sind jedoch nur Wrapper, die auf den zugrunde liegenden Wert in _indexes [1] zugreifen.
Da UIKit mit beiden Kategorien verknüpft ist, sind immer beide Komfortfunktionen verfügbar, unabhängig davon, wo Sie sie unter IOS verwenden. Sie können also einen NSIndexPath aus [NSIndexPath indexPathForRow: inSection:] erstellen, aber den zweiten Index aus indexPath.item abrufen. Der zugrunde liegende Wert ist genau der gleiche, unabhängig davon, ob auf indexPath.item oder indexPath.row zugegriffen wird.
Stilistisch ist es sauberer, wenn Sie "item" mit UICollectionView und "row" mit UITableView verwenden, da diese so verwendet werden sollten, und dies sorgt für besser lesbaren Code. Ihr Programm stürzt jedoch nicht ab, wenn Sie sie austauschen.
Referenz: NSIndexPath
quelle
Wenn Sie unten in UICollectionView.h nachsehen, sehen Sie die Kategorie, die NSIndexPath erweitert, um sie
item
als Eigenschaft hinzuzufügen, wenn sie in UICollectionView-Instanzen verwendet wird.Am Ende von UITableView.h befindet sich ein ähnlicher Abschnitt, in dem NSIndexPaths hinzugefügt
row
undsection
Eigenschaften hinzugefügt werden, die in UITableViews verwendet werden.Wenn Sie versuchen, auf diese Eigenschaften einer NSIndexPath-Instanz innerhalb einer Klasse zuzugreifen, und die NSIndexPathInstance nicht glaubt, dass sie vorhanden sind, importieren Sie einfach den Header der Klasse, die sie definiert, in den oberen Bereich Ihrer Klasse, und Sie können auf magische Weise darauf zugreifen diese Eigenschaften.
UICollectionView.h
UITableView.h
Um diese Eigenschaften in Ihrer Klasse zu verwenden, müssen Sie die gewünschte wie folgt in Ihre Klasse importieren:
@import "UIKit/UITableView.h"
Und dann können Sie Dinge tun wie:
myIndexPath.row
und[myIndexPath row]
quelle