NSIndexpath.item vs NSIndexpath.row

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

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

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

5 Solutions collect form web for “NSIndexpath.item vs NSIndexpath.row”

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

Внутри 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]

  • UITableView прыгает при прокрутке после изменения высоты ячейки
  • «Никаких строк не найдено», когда нет ни строк, ни ячеек для UICollectionView и UITableView
  • Как получить кнопку, чтобы оставаться справа в ячейке для всех размеров?
  • ipad как создать программно несколько таблиц на одном представлении
  • Добавление большего количества прототипов ячеек в раскадровку iOS, чем размерность viewcontroller?
  • Таблица повторного использования Просмотр переменных Swift
  • Должны ли мы использовать UITableView, когда у нас есть UICollectionView?
  • Две кнопки в UITableViewCell: как определить, какой indexPath был выбран?
  • Автозапуск не работает с многократно используемыми ячейками таблицы
  • IOS - Как создать TabelView с горизонтальными прокручиваемыми списками
  • iPhone - обнаружение касаний подзаголовка UITableViewCell
  • Interesting Posts

    Батарея Bluetooth установлена ​​на ноль

    API iOS Google Plus – совместное использование или вход в систему без перехода в Safari

    Как найти пользователей рядом с текущим местоположением пользователя с помощью Parse?

    Как удалить предупреждение о возврате памяти при вставке большого количества данных в основные данные?

    Что такое «Metal Flush» на дисплее статистики SceneKit?

    Значение переменной экземпляра ARC сохраняется

    IOS утечка памяти в методе класса

    маскирование маски с помощью CAShapeLayer и UIBezierPath

    UIToolbar отказывается двигаться

    REST API из мобильного приложения. Обеспечивает ли безопасность первый вызов с помощью CAPTCHA?

    Изменение цвета индикатора активности на черный

    Как удалить приложение Сборка на новом сайте iTunes Connect?

    Получить список всех установленных приложений

    Изменение цвета контроллера навигации

    Как получить индекс UITableViewCell из UITextField?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.