NSIndexpath.item vs NSIndexpath.row

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

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

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

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

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

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

 indexPath.row is best in your case 

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

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

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

Например , indexPath 1.4.3.2 указывает путь, показанный на рисунке введите описание изображения здесь

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

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

Обычно indexPath имеет два свойства

1 – ряд

2 – вещь

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

  Available in iOS 2.0 and later. 

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

 > Available in iOS 6.0 and later. 

Вам нужно использовать indexPath.row

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

indexPath.row для tableView и indexPath.item для collectionView .

пункт

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

обсуждение

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

 Available in iOS 6.0 and later. 

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


ряд

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

обсуждение

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

 Available in iOS 2.0 and later. 

Пожалуйста, проверьте дополнения NSIndexPath для получения более подробной информации.

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


От @Owen Годфри:

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

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


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

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

Стилистически это более чисто, если вы используете «элемент» с 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]

  • UITextField на UITableViewCell перестает отвечать на прикосновения - возможно, это вызвано прокруткой экрана
  • Высота iOS 7.1 beta5 tableviewcell, показывающая объекты вне его диапазона
  • UITableViewCell, две ячейки получают аксессуар
  • почему границы UITableViewCell не могут быть переопределены до того, как обрезаются границы ячейки?
  • UITableView reloadData и @catch block
  • Настройка действия для пользовательской кнопки раскрытия информации UITableView
  • Попытка сохранить данные в Core Data из текстового поля UITableViewController
  • IBAction внутри UITableViewCell не вызывается в iOS 9
  • Как найти indexPath для нажатой кнопки в tableView Использование Seque
  • UITableViewCell - Понимание «повторно используемого»
  • Тень в UITableViewCell перемещается снизу вверх, чтобы прокрутить вверх
  • Interesting Posts

    NSDateFormatter не работает должным образом при преобразовании из буддийского календаря в григорианские форматы дат календаря

    Загрузите идентификатор UIActivityIndicator через UIImagePickerController в iOS

    Понимание использования метода invertedSet для NSCharacterSet

    Как повернуть карту Google в соответствии со значением Компонента устройства?

    В раскадровке iOS 5, как вы нажимаете новую сцену на исходный контроллер вида из Popover?

    afnetworking – exc_bad_access в startMonitoringNetworkReachability

    Конфиденциальность пользователей Firebase

    – : попытка вставить нулевой объект из объектов '

    Как проверить, поддерживается ли Haptic Engine (UIFeedbackGenerator)

    Представление контроллера просмотра настраиваемого размера с помощью навигации

    dyld: библиотека не загружена: @ rpath / libswiftCore.dylib. Проблема сохраняется

    UITableViewCell Скользящее моделирование в быстром

    «Невозможно создать XXX-Info.plist» с использованием Jenkins

    Какой способ изменить размер UIImage лучше и почему?

    UITableViewCell – это нуль, если это не видно

    Давайте будем гением компьютера.