NSIndexpath.item 대 NSIndexpath.row


82

사람 사이의 차이를 알고 있나요 NSIndexpath.rowNSIndexpath.item?

구체적으로 어떤 것을 사용합니까?

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

2
예, 행에서 row사용됩니다 UITableView. 는 item에 의해 사용되는 UICollectionView셀.
holex

답변:


204

좋아요, 아무도 여기서 좋은 답을주지 않았습니다.

NSIndexPath 내에서 인덱스는 NSUInteger *로 정의 된 "_indexes"라는 간단한 c 배열에 저장되고 배열의 길이는 NSUInteger로 정의 된 "_length"에 저장됩니다. 접근 자 "section"은 "_indexes [0]"의 별칭이고 "item"과 "row"는 모두 "_indexes [1]"의 별칭입니다. 따라서 두 기능은 기능적으로 동일합니다.

프로그래밍 스타일과 정의 체인 측면에서 테이블 컨텍스트에서는 "행"을 사용하고 컬렉션 컨텍스트에서는 "항목"을 사용하는 것이 좋습니다.


28
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- indexPath에서 UITableView특정 기반 을 얻기 위해 속성 사용 . 또한 읽기 전용 속성입니다.

 Available in iOS 2.0 and later.

항목- 섹션에서 항목UICollectionView 을 가져 오려면와 함께 올바르게 사용 하십시오. 읽기 전용 속성입니다. 이 속성을 사용하려면 UICollectionView.h 에서 선언해야합니다.

>     Available in iOS 6.0 and later.

NSIndexPath Class Reference 링크를 제공 할 수 있습니다.
esh

25
그럴 수도 있지만 일반적으로 답변 자체에 관련 부분을 포함하는 것이 좋습니다. 다른 답변이 너무 좁은 답변을 제공했기 때문에 NSIndexPath.

6
나는 여전히 indexPath.item에 대한 언급을 보지 못했지만 질문이 묻는 것 중 하나는 indexPath.item과 indexPath.row의 차이점이었습니다. Midhun MP의 대답이 그렇습니다. 문서를 복사하여 붙여 넣는 것은 약간의 정교함 없이는별로 도움이되지 않습니다.
esh

10

당신은 사용해야합니다 indexPath.row

차이점은 다음과 같습니다.

indexPath.row는 tableView 용이고 indexPath.item은 collectionView 용입니다 .

안건

콜렉션보기의 섹션에서 항목을 식별하는 색인 ​​번호입니다. (읽기 전용)@property (nonatomic, readonly) NSInteger item;

토론

항목이있는 섹션은 섹션 값으로 식별됩니다. 유효성

Available in iOS 6.0 and later.

UICollectionView.h에서 선언 됨


테이블 뷰 섹션의 행을 식별하는 인덱스 번호입니다. (읽기 전용)@property(nonatomic, readonly) NSInteger row;

토론

행이있는 섹션은 섹션 값으로 식별됩니다. 유효성

Available in iOS 2.0 and later.

자세한 내용은 NSIndexPath 추가 사항을 확인 하십시오.


4

@Owen Godfrey의 답변은 @iPatel의 답변보다 낫습니다. 여기에 그의 답변에 대한 의견에 맞출 수 없었던 추가 설명이 있으므로 그의 답변을 복사하여 여기에 추가하겠습니다. 신용은 Owen의 것입니다.


@Owen Godfrey에서 :

NSIndexPath 내에서 인덱스는 NSUInteger *로 정의 된 "_indexes"라는 간단한 c 배열에 저장되고 배열의 길이는 NSUInteger로 정의 된 "_length"에 저장됩니다. 접근 자 "section"은 "_indexes [0]"의 별칭이며 "item"과 "row"는 모두 "_indexes 1 "의 별칭 입니다. 따라서 두 기능은 기능적으로 동일합니다.

프로그래밍 스타일과 정의 체인 측면에서 테이블 컨텍스트에서는 "행"을 사용하고 컬렉션 컨텍스트에서는 "항목"을 사용하는 것이 좋습니다.


NSIndexPath의 핵심 인터페이스는 NSIndexPath.h에 정의되어 있습니다. 인덱스의 저장소는 NSUInteger의 개인 1 차원 배열 인 _indexes에 있습니다. NSIndexPath는 그 자체로 여러 차원을 나타낼 수 있습니다. 기능을 확장하는 NSIndexPath에는 두 개의 관련 카테고리가 있습니다. 하나는 UICollectionView.h "NSIndexPath (UICollectionViewAdditions)"이고 다른 하나는 UITableView.h "NSIndexPath (UITableView)"입니다. UICollectionView.h의 하나는 readonly 속성 "item"및 관련 편의 메서드를 추가합니다. UITableView.h의 하나는 readonly 속성 "row"및 관련 편의 메서드를 추가합니다. 그러나 두 속성 모두 _indexes [1]의 기본 값에 액세스하는 래퍼 일뿐입니다.

UIKit은 두 범주 모두와 연결되기 때문에 IOS에서 사용하는 위치에 관계없이 두 가지 편의 기능 집합을 항상 사용할 수 있습니다. 따라서 [NSIndexPath indexPathForRow : inSection :]에서 NSIndexPath를 만들 수 있지만 indexPath.item에서 두 번째 인덱스를 검색 할 수 있습니다. 기본 값은 indexPath.item 또는 indexPath.row에 의해 액세스되는지 여부에 관계없이 정확히 동일합니다.

형식적으로 UICollectionView와 함께 "item"을 사용하고 UITableView와 함께 "row"를 사용하는 것이 의도 된 방식대로 사용하면 더 깔끔하며 코드를 더 읽기 쉽게 만들 수 있습니다. 그러나 프로그램을 바꾸면 충돌하지 않습니다.

참조 : NSIndexPath


0

UICollectionView.h 하단을 보면 itemUICollectionView 인스턴스에 사용할 때 속성 으로 추가 할 NSIndexPath를 확장하는 범주가 표시 됩니다.

UITableView.h 하단에는 UITableViews 에서 사용되는 NSIndexPaths에 대한 속성 rowsection속성을 추가하는 유사한 섹션이 있습니다 .

클래스 내에서 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]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.