5

私のアプリでは、viewsin-place にする必要があるものがいくつかありeditableます。有効になっている a を含めるようにtableviewcellsセットアップしましUITextFieldた。テキストは変更できますが、これで問題ありません。動作します。

私の質問は、これらを追跡するための最良のアプローチは何ですか? するべきか :

  • それぞれの iVar を保持しますtextfield。もしそうなら
    • 一度しかインスタンス化されていない場合、それぞれcellが正しいフィールドを持っていることを確認するにはどうすればよいですか?
  • の作成時にをtextfield追加し、 のcell設定時にその値を設定するだけcellです。もしそうなら
    • 値を追跡するにはどうすればよいですか? cellが終了してから戻った場合view、その値は編集された値ではなく、元の値にリセットされます。

このシナリオでは、一般的にどのようなアプローチを使用する傾向がありますか? cells特に、扱っているものが多数ある場合。

4

3 に答える 3

10
  1. すべてのテキスト フィールドの値をデータ モデルの可変配列に格納します。

  2. tableView:willDisplayCell:forRowAtIndexPath:インデックス パスに基づく配列の値を使用して、テキスト フィールドの値を設定します。

  3. テキスト フィールドの編集が終了したら、すぐに値を配列に戻します。これにはすでにプロトコルがあります (独自に記述する必要はありません) が、indexPath が渡されず、テキスト フィールドに関連付けられたものを見つける必要があるため、通常より少しトリッキーです。

    - (void) textFieldDidEndEditing:(UITextField *)textField {
        CGRect location = [self convertRect:textField.frame toView:self.tableView];
        NSIndexPath *indexPath = [[self.tableView indexPathsForRowsInRect:location] objectAtIndex:0];
    
        // Save the contents of the text field into your array:
        [yourArray replaceObjectAtIndex:indexPath.row withObject:textField.text];
    }
    
于 2013-01-16T06:15:54.960 に答える
3
  • UITableViewCell をサブクラス化し、その init メソッドに UITextField を追加します。

  • カスタム細胞クラスのプロトコルを作成します。UITextField が編集を開始するとき、または編集を終了するときに、デリゲートのメソッドを呼び出します。

  • コントローラーで、カスタム セルのプロトコルを実装し、indexpath 行の値を tableView:cellForRowAtIndexPath のセルのタグに設定します。

そのため、UITextField を編集するたびに、コントローラーでどの行が編集されているかを (セルのタグを介して) 知ることができます。

于 2013-01-16T05:42:20.920 に答える
2

最善の方法は、MVC に従ってモデルを実装することです。この場合は、テキスト フィールドの値です。これらの値を配列に格納し、 cellForIndexPath メソッドで配列内の正しい値を参照します。たとえば、テーブルの最初の行 (indexPath.row == 0) は、配列の最初の要素を取得します。textField の変更は、配列内の対応する要素に記録されます。

于 2013-01-16T05:10:05.607 に答える