NSIndexpath.item vs NSIndexpath.ряд


кто-нибудь знает разницу между NSIndexpath.row и NSIndexpath.item?

в частности, какой из них я использую в:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
5 61

5 ответов:

хорошо, никто не дал хороший ответ здесь.

внутри NSIndexPath индексы хранятся в простом массиве c, называемом "_indexes", определяемом как NSUInteger*, а длина массива хранится в" _length", определяемом как NSUInteger. Раздел "accessor" является псевдонимом для " _indexes[0]", а" item "и" row "являются псевдонимами для"_indexes[1]". Таким образом, они функционально идентичны.

с точки зрения стиля программирования-и, возможно, цепочки определения-Вы были бы лучше использовать "строку "в контексте таблиц и" элемент " в контексте коллекций.

indexPath.row is best in your case 

первая информация о NSIndexPath

The NSIndexPath класс представляет путь к определенному узлу в дереве вложенных коллекций массивов. Этот путь известен как путь индекса.

каждый индекс в indexPath представляет индекс в массив дочерних элементов от одного узла в дереве к другому, более глубокому узлу.

, indexPath 1.4.3.2 указывает путь, показанный в Фигура enter image description here

вот в вашем случае indexPath.row возвращает индекс строки в определенном indexPath.

различия междуindexPath.row and indexPath.item

вообще indexPath и свойства

1 - row

2 - item

row - использование свойств с UITableView для получения определенных row база на indexPath. это также свойство только для чтения

 Available in iOS 2.0 and later.

item - правильно использовать UICollectionView для получения item в раздел. Это свойство доступно только для чтения. Для использования этого свойства необходимо объявить его в
UICollectionView.h

>     Available in iOS 6.0 and later.

вы должны использовать indexPath.row

разница в том, что:

indexPath.строка предназначена для tableView и indexPath.элемент предназначен для collectionView.

item

порядковый номер, идентифицирующий элемент в разделе представления коллекции. (только для чтения) @property (nonatomic, readonly) NSInteger item;

Обсуждение

раздел, в котором находится элемент, определяется значением раздела. Доступность

Available in iOS 6.0 and later.

Объявлено В UICollectionView.h


row

порядковый номер, идентифицирующий строку в табличном виде. (только для чтения) @property(nonatomic, readonly) NSInteger row;

Обсуждение

раздел, в котором находится строка, определяется значением раздела. Доступность

Available in iOS 2.0 and later.

пожалуйста, проверьте NSIndexPath Дополнения дополнительные сведения

ответ@Owen Godfrey лучше, чем принятый ответ от @iPatel. Вот некоторые дополнительные разъяснения, которые я не смог вписать в комментарий к его ответу, поэтому я скопирую его ответ и добавлю к нему здесь. Кредит принадлежит Оуэну.


От @Owen Godfrey:

внутри NSIndexPath индексы хранятся в простом массиве c, называемом "_indexes", определяемом как NSUInteger*, а длина массива хранится в" _length", определяемом как NSUInteger. Средство доступа "раздел" - это псевдоним "_indexes[0]" и как "элемент" и "ряд" псевдонимов "_indexes1". Таким образом, они функционально идентичны.

с точки зрения стиля программирования – и, возможно, цепочки определений – вам было бы лучше использовать "строку" в контексте таблиц и "элемент" в контексте коллекций.


основной интерфейс NSIndexPath определяется в NSIndexPath.h. хранение индексов находится в _indexes, который является частным одномерный массив NSUInteger. NSIndexPath сам по себе может представлять любое количество измерений. Есть две соответствующие категории на NSIndexPath, которые расширяют функциональность, один из UICollectionView.h " NSIndexPath (UICollectionViewAdditions)" и один из UITableView.h " NSIndexPath (UITableView)". Один из UICollectionView.h добавляет свойство readonly "item" и связанные с ним методы удобства. Один из UITableView.h добавляет свойство readonly " row " и связанные с ним удобства методы. Однако оба свойства являются просто оболочками, которые обращаются к базовому значению в _indexes[1].

поскольку UIKit связан с обеими категориями, оба набора функций удобства всегда доступны, независимо от того, где в IOS вы их используете. Таким образом, Вы можете создать NSIndexPath из [NSIndexPath indexPathForRow:inSection:] но получить второй индекс из indexPath.пункт. Базовое значение точно такое же, если доступ осуществляется с помощью indexPath.элемент или indexPath.ряд.

стилистически это чище, если вы используете "item" с UICollectionView и "row" с UITableView, поскольку именно так они были предназначены для использования, и это делает более читаемый код. Однако ваша программа не рухнет, если вы поменяете их местами.

ссылки: NSIndexPath

посмотрите на нижнюю часть UICollectionView.h и вы увидите категорию, которая расширяет NSIndexPath для добавления item как свойство при использовании внутри для экземпляров UICollectionView.

есть аналогичный раздел в нижней части UITableView.H, который добавляет row и section свойства для NSIndexPaths, которые используются в UITableViews.

если вы пытаетесь получить доступ к этим свойствам экземпляра NSIndexPath в классе и NSIndexPathInstance не делает поверьте, что они есть, просто импортируйте заголовок класса, который их определяет, в верхнюю часть вашего класса, и вы волшебным образом сможете получить доступ к этим свойствам.

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

чтобы использовать эти свойства в своем классе, вам нужно будет импортировать желаемый в свой класс следующим образом:

@import "UIKit/UITableView.h"

и тогда вы можете делать такие вещи, как:myIndexPath.row и [myIndexPath row]