사람 사이의 차이를 알고 있나요 NSIndexpath.row
과 NSIndexpath.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 하단을 보면 item
UICollectionView 인스턴스에 사용할 때 속성 으로 추가 할 NSIndexPath를 확장하는 범주가 표시 됩니다.
UITableView.h 하단에는 UITableViews 에서 사용되는 NSIndexPaths에 대한 속성 row
과 section
속성을 추가하는 유사한 섹션이 있습니다 .
클래스 내에서 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]