0

UITableViewの一番上の行(cell.textLabel.text)を常に読み取るにはどうすればよいですか?

私には2つのわずかに異なるアプローチがあります。

1:

UITableViewCell *cell2 = [tableView cellForRowAtIndexPath:indexPath];
NSString *cellText2 = cell2.textLabel.text;
NSLog (@" cellText2 = %@", cellText2);

2:

NSMutableString *newidea = [self.array objectAtIndex:indexPath.row];

NSLog (@"newidea = %@", newidea);

両方のコードはメソッド内にあります- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

self.arrayは、tableViewを埋めるのと同じ配列です。

前者のアプローチでは、常に6番目のセルのテキストが表示されます。後者のアプローチでは、常に5番目のセルのテキストが表示されます。私のテーブルビューでは、一度に4つのセルがあります。@

私が取得したいのは、最上部のセルからのテキストです。

4

2 に答える 2

4

あなたは間違ったアプローチをしていると思います。セルから値を読み取るのではなく、セルにデータ配列から値を読み取らせます。セルは再利用されるため、常に任意の値を持つことができます。テーブル ビューに 30 個の「セル」がある場合でも、既存の実際のセルは 5 個しかない場合があります。スクロール時にセルがテーブル ビューの外に出ると、そのセルは一番下に移動され、次のセルとして再利用されます。そのため、常にインデックス パスの各セルに値を設定する必要があります。

代わりに、データ配列がある場合は、データ配列から最初のセルの値を取得する必要があります。indexPath.row == 0テーブル ビューがセル属性に付けるタイトルを尋ねる場合、cellForRowAtIndexPathたとえば、30 個の異なるセルに対して 30 個の文字列を含む "_cellTitles" という配列から、 でそれを指定します。

「一番上の」可視セルからテキストを取得したい場合はindexPathsForVisibleRows、テーブルビューを呼び出すことができます。返された配列の最初のオブジェクトは、一番上の可視セルのインデックス パスです。インデックス indexPath.row で配列内の文字列を確認できます。

例:

NSArray *visibleRows = [self.tableView indexPathsForVisibleRows];
NSIndexPath *firstVisibleCell = [visibleRows objectAtIndex:0];
NSString *firstVisibleCellTitle = [_myDataArray objectAtIndex:indexPath.row];
于 2012-07-02T20:03:41.697 に答える
0

常に最初の行から読み取りたい場合は、indexPath の代わりに 1 を指定します。そうすれば、常に最初の行から読み取られます。

于 2012-07-02T19:40:05.447 に答える