3

UITextViewを持つ多くの行を持つテーブルビューセルがあります。これらのUITextViewで、ユーザーは値を入力できます。

私が抱えている問題は、行が非表示になっているときに行の値を取得したい場合、nilを取得することです。

NSString *cellValue = ((UITextField *)[[[self.table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]] contentView] viewWithTag:[self.table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]].tag]).text;

ユーザーがUITextFieldに入力した値を保存しようと考えていましたが、ユーザーが計算を実行する行をクリックすると、デリゲートtextFieldDidEndEditingが呼び出されません。

この値を安全な方法で取得する方法がわかりません。

4

4 に答える 4

5

UITableViewの背後にあるデータソースをターゲットにする必要があります。UITableViewは単なる表示メカニズムであり、データにアクセスするための主要なリソースではありません。タイトルに基づいてセルのインデックスを取得できますが、実際のデータを取得するには、データソースを調べます。それでも、可能であれば、データソース自体に対するすべての操作を処理するだけです。最初にテーブルを作成するとき、データソースはある種のリストまたは配列であるため、そのまま使用できます。ビューに変数を作成し、そこにリスト/配列を保持して、それがあり、すべて設定されていることを確認する必要がある場合があります。

幸運を!

于 2012-05-14T21:20:46.737 に答える
1

前述のように、通常はUITableViewデータソースを使用してこれにアクセスします。

とはいえ、デキューされたセルを使用しているため、期待するデータが表示されていない可能性があります。セルの数が少ない場合はNSDictionary、キーがセクションと行の組み合わせである独自のセルをキャッシュし、独自のキャッシュを介してそれらのビュー階層にアクセスすることを検討できます。

于 2012-05-14T21:31:29.533 に答える
1

tableView必要なもので'dataSourceを直接参照することにより、現在表示されていない行にアクセスできますIndexPath

これは、次のようにすることで実現できます(Swift 3を使用する場合)。

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

于 2017-09-28T09:17:55.507 に答える
0

最も可能性が高いのは、セルの再利用です。したがって、テキストフィールドのあるセルが画面から消えると再利用されるため、アクセスできなくなります。あなたがする必要があるのは、彼らがテキストフィールドに入った直後にテキストフィールドから値を取得し、それをどこかに保存することです。– textField:shouldChangeCharactersInRange:replacementString:ユーザーがテキストフィールドに文字を入力するたびに文字列を保存できるように使用できます。

于 2012-05-14T21:29:12.823 に答える