85

との違いを知っている人はいますNSIndexpath.rowNSIndexpath.item

具体的には、どちらを使用しますか:

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

5 に答える 5

210

さて、ここでは誰も良い答えを出していません。

NSIndexPath内では、インデックスはNSUInteger *として定義された「_indexes」と呼ばれる単純なc配列に格納され、配列の長さはNSUIntegerとして定義された「_length」に格納されます。アクセサ「section」は「_indexes[0]」のエイリアスであり、「item」と「row」の両方が「_indexes[1]」のエイリアスです。したがって、2つは機能的に同一です。

プログラミングスタイル、そしておそらく定義チェーンの観点からは、テーブルのコンテキストでは「行」を使用し、コレクションのコンテキストでは「アイテム」を使用する方がよいでしょう。

于 2013-06-19T03:03:57.147 に答える
30
indexPath.row is best in your case 

NSIndexPathに関する最初の情報

このNSIndexPathクラスは、ネストされた配列コレクションのツリー内の特定のノードへのパスを表します。このパスは、インデックスパスと呼ばれます。

indexPathの各インデックスは、ツリー内の1つのノードから別のより深いノードへの子の配列へのインデックスを表します。

たとえば、indexPath 1.4.3.2、図に示すパスを指定します。 ここに画像の説明を入力してください

ここではindexPath.row、特定のの行のインデックスを返します indexPath

間の違い indexPath.row and indexPath.item

一般的indexPath2つのプロパティがあります

1

2-アイテム

row-UITableView indexPathで特定のベースを取得するためのプロパティの使用。読み取り専用プロパティでもあります

 Available in iOS 2.0 and later.

item-セクション内のアイテムUICollectionViewを取得するために適切に使用します。読み取り専用のプロパティです。このプロパティを使用するには、UICollectionView.hで宣言する必要があります

>     Available in iOS 6.0 and later.
于 2013-02-08T04:40:06.170 に答える
10

あなたが使用する必要がありますindexPath.row

違いは次のとおりです。

indexPath.rowはtableView用で、indexPath.itemはcollectionView用です

アイテム

コレクションビューのセクション内のアイテムを識別するインデックス番号。(読み取り専用)@property (nonatomic, readonly) NSInteger item;

討論

アイテムが含まれるセクションは、sectionの値によって識別されます。可用性

Available in iOS 6.0 and later.

UICollectionView.hで宣言


テーブルビューのセクションの行を識別するインデックス番号。(読み取り専用)@property(nonatomic, readonly) NSInteger row;

討論

行が含まれるセクションは、sectionの値によって識別されます。可用性

Available in iOS 2.0 and later.

詳細については、 NSIndexPathの追加を確認してください

于 2013-02-08T04:38:51.790 に答える
4

@Owen Godfreyの回答は、@iPatelから受け入れられた回答よりも優れています。ここに私が彼の答えのコメントに収めることができなかったいくつかのさらなる説明があります、それで私は彼の答えをコピーしてここに追加します。クレジットはオーウェンに帰属します。


@Owen Godfreyから:

NSIndexPath内では、インデックスはNSUInteger *として定義された「_indexes」と呼ばれる単純なc配列に格納され、配列の長さはNSUIntegerとして定義された「_length」に格納されます。アクセサ「section」は「_indexes[0]」のエイリアスであり、「item」と「row」の両方が「_indexes1」のエイリアスです。したがって、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

于 2015-12-22T10:26:34.977 に答える
0

UICollectionView.hの下部を見ると、itemUICollectionViewインスタンス内で使用されるときに、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]

于 2016-03-18T17:20:02.260 に答える