NSIndexpath.row
との違いを知っている人はいNSIndexpath.item
ますか?
具体的には、どちらを使用しますか:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
回答:
さて、ここでは誰も良い答えを出していません。
NSIndexPath内では、インデックスはNSUInteger *として定義された「_indexes」と呼ばれる単純なc配列に格納され、配列の長さはNSUIntegerとして定義された「_length」に格納されます。アクセサ「section」は「_indexes [0]」のエイリアスであり、「item」と「row」は両方とも「_indexes [1]」のエイリアスです。したがって、2つは機能的に同一です。
プログラミングスタイル(そしておそらく定義チェーン)の観点からは、テーブルのコンテキストでは「行」を使用し、コレクションのコンテキストでは「アイテム」を使用する方がよいでしょう。
indexPath.row is best in your case
NSIndexPathに関する最初の情報
このNSIndexPath
クラスは、ネストされた配列コレクションのツリー内の特定のノードへのパスを表します。このパスは、インデックスパスと呼ばれます。
indexPathの各インデックスは、ツリー内の1つのノードから別のより深いノードへの子の配列へのインデックスを表します。
例えば、indexPath 1.4.3.2図示指定パス
ここであなたの場合indexPath.row
、特定ので行のインデックスを返します indexPath
。
間の違い indexPath.row and indexPath.item
一般的indexPath
に2つのプロパティがあります
1-行
2-アイテム
row- indexPathでUITableView
特定の行ベースを取得するために使用するプロパティ。読み取り専用プロパティでもあります
Available in iOS 2.0 and later.
item-セクション内のアイテムUICollectionView
を取得するために適切に使用します。読み取り専用のプロパティです。このプロパティを使用するには、UICollectionView.hで宣言する必要があります
> Available in iOS 6.0 and later.
NSIndexPath
ます。
あなたは使用する必要があります 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;
討論
行が含まれるセクションは、sectionの値によって識別されます。可用性
Available in iOS 2.0 and later.
詳細については、NSIndexPathの追加を確認してください
@Owen Godfreyの回答は、@ iPatelから受け入れられた回答よりも優れています。これは私が彼の答えのコメントに収めることができなかったいくつかのさらなる説明です、それで私は彼の答えをコピーしてここに追加します。クレジットはオーウェンに帰属します。
@Owen Godfreyから:
NSIndexPath内では、インデックスはNSUInteger *として定義された「_indexes」と呼ばれる単純なc配列に格納され、配列の長さはNSUIntegerとして定義された「_length」に格納されます。アクセッサ「セクション」は「_indexes [0]」と「項目」と「行」の両方にエイリアスである「_indexesにエイリアスされている1」。したがって、2つは機能的に同一です。
プログラミングスタイル(そしておそらく定義チェーン)の観点からは、テーブルのコンテキストでは「行」を使用し、コレクションのコンテキストでは「アイテム」を使用する方がよいでしょう。
NSIndexPathのコアインターフェイスはNSIndexPath.hで定義されています。インデックスの格納は、NSUIntegerのプライベート1次元配列である_indexesにあります。NSIndexPath自体は、任意の数のディメンションを表すことができます。NSIndexPathには、機能を拡張する2つの関連カテゴリがあります。1つはUICollectionView.h "NSIndexPath(UICollectionViewAdditions)"からのもので、もう1つはUITableView.h "NSIndexPath(UITableView)"からのものです。UICollectionView.hからのものは、読み取り専用プロパティ「item」と関連する便利なメソッドを追加します。UITableView.hからのものは、読み取り専用プロパティ「row」および関連する便利なメソッドを追加します。ただし、どちらのプロパティも、_indexes [1]の基になる値にアクセスする単なるラッパーです。
UIKitは両方のカテゴリにリンクしているため、IOSのどこで使用していても、便利な機能の両方のセットを常に使用できます。したがって、[NSIndexPath indexPathForRow:inSection:]からNSIndexPathを作成できますが、indexPath.itemから2番目のインデックスを取得できます。基になる値は、indexPath.itemまたはindexPath.rowのどちらからアクセスしてもまったく同じです。
UICollectionViewで「item」を使用し、UITableViewで「row」を使用すると、スタイル的にはよりクリーンになります。これにより、コードが読みやすくなります。ただし、それらを交換してもプログラムはクラッシュしません。
参照:NSIndexPath
UICollectionView.hの下部を見るとitem
、UICollectionViewインスタンス内で使用されるときに、NSIndexPathを拡張してプロパティとして追加するカテゴリが表示されます。
追加UITableView.hの下部に同様の部分があるrow
とsection
UITableViewsで使用されるNSIndexPathsのプロパティが。
クラス内の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]
row
で使用されUITableView
ます。これitem
はUICollectionView
セルによって使用されます。