[ios] NSIndexpath.item 대 NSIndexpath.row

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

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

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



답변

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

NSIndexPath 내에서 인덱스는 NSUInteger *로 정의 된 “_indexes”라는 간단한 c 배열에 저장되고 배열의 길이는 NSUInteger로 정의 된 “_length”에 저장됩니다. 접근 자 “section”은 “_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- indexPath에서 UITableView특정 기반 을 얻기 위해 속성 사용 . 또한 읽기 전용 속성입니다.

 Available in iOS 2.0 and later.

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

>     Available in iOS 6.0 and later.


답변

당신은 사용해야합니다 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 추가 사항을 확인 하십시오.


답변

@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


답변

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]


답변