2011-06-26 6 views
8

テーブルに現在表示されていないindexPathのセルを取得するにはどうすればよいですか?必要なindexPathのセルが範囲外であるため、iOS SDK:表示されていない表ビューでセルを取得するにはどうすればよいですか?

NSString *name = [[(ELCTextfieldCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] rightTextField] text]; 

-cellForRowAtIndexPath...戻りnil:私のセルを取得するため

コード(セルが範囲外です)。どうすれば正しいセルを得ることができますか?

+0

は、より多くの情報とコードを入力してください。 – dasdom

+0

OK、グループ化されたテーブルビューがあります。一部のセルにはテキストフィールドがあり、最後にボタンを表すセルがあります。 今、私が問題を抱えているのは、私がテーブルビューの最後にいる場合、最初の2つのセルが範囲外ですが、ボタンを表すセルをクリックすると、最初に提供された情報が必要になるという問題があります。 今、私はしようとしました:[[(ELCTextfieldCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] rightTextField] text]が、セルが範囲外ですので、-cellForRowAtIndexPath:...はnilを返します。 正しいセルを取得するにはどうしたらいいですか? –

+0

あなたの質問に対する答えは、nacho4dの言う通りです。情報を取得するためにセルを使用せず、基礎となるデータソースから取得します。より広範な答えは、スクロールバーでビューを使用する代わりに、スクロールUIをレイアウトするためにテーブルビューを使用しているようです。 – Abizern

答えて

4

これは動作しません。情報が入力または変更されるとすぐに情報を取得して保存する必要があります。それは容易に範囲外になる可能性があり、あなたの細胞の寿命を十分に長く保障することはできません。まあ、技術的にそれを保持することができます(と常に同じインデックスパスのための非常に同じセルを返す)が、私はそのデザインに疑問を抱くだろう。

+0

OKですが、セルを動的に追加できるテーブルがあり、ユーザーが作成するセルの数がわかりません。 –

+0

私は妥当な唯一のアプローチは、変更が発生するとすぐに変更を保存することだと思います。後でそのデータを取得するのに苦労するかもしれませんし、セルがすでに「死んで」いて解放されているかもしれません。 – Eiko

15

UITableViewは、可視セルのみを保持します。表示されていないものが必要な場合は、 dataSourcetableView:cellForRowAtIndexPath:に電話する必要があります。自己がdataSourceあるクラスであれば、:

UITableViewCell * cell = [self tableView:table cellForRowAtIndexPath:indexPath]; 
+0

thx、それは動作します! :D –

+2

一般に、これらのセルに入力されたデータは保持されません。キャッシュに残っている場合にのみ動作します。 – Eiko

+0

それは働く... !!!どうもありがとう。あなたはたくさんの時間を節約しました。 –

2

UITableViewCellsは、ユーザーが目に見えるものの数よりも多くの細胞を作成する必要はありませんような方法でリサイクル/再利用されるように作られています。 通常、表示されていないセルにはアクセスする必要はありません。それはあなたのデータソースにアクセスし、そこのコレスポンデントデータを取得/設定するのに十分でなければなりません。セルは、データソースの状態を表示するためのものです。ないデータソース自体:)

編集:あなたは、あなたが正しい、上記1つのセルからいくつかの情報(テキスト)を必要とする

言いましたか? cellForRowAtIndexPath:メソッドを使用すると、セルが再作成されますが、テキストフィールドにあるテキストは取得されないことがあります。理由?おそらくあなたはどこか他の場所にそれを保存しなかったからです。それを保存した場合は、セルを通過する代わりに直接アクセスしてください。

0

テーブルに配列情報が入力されていますか? 0インデックスの配列から直接取り出すことはできませんか?cellForRowAtIndexPathと同じように、そのセルが表示されたときにそのセルを取り出して塗りつぶすでしょうか?

+0

いいえ、私はすでにそれを解決しました! :) –

0

では、ラファエルの答え@に進み、ここで(作業)SWIFT 3ソリューションです:

UITableViewCell cell = self.tableView(self.tableView, cellForRowAt: indexPath)

関連する問題