がありUITableView
、それぞれUITableViewCell
に編集可能な が含まれていますUITextView
。
私のデータ ソースは、テキスト値とテキストのいくつかのスタイリング キーを保持するコンテインですNSMutableArray
。NSMutableDictionary
ユーザーが UITextView に加えた変更が対応する datasource で更新されるようにするにはどうすれば (効率的に) 作成できますNSMutableDictionary
か?
がありUITableView
、それぞれUITableViewCell
に編集可能な が含まれていますUITextView
。
私のデータ ソースは、テキスト値とテキストのいくつかのスタイリング キーを保持するコンテインですNSMutableArray
。NSMutableDictionary
ユーザーが UITextView に加えた変更が対応する datasource で更新されるようにするにはどうすれば (効率的に) 作成できますNSMutableDictionary
か?
まず、どの UITextView を参照しているかを正確に知るために、各 UITextView にタグを割り当てる必要があります。
次に、テーブルビューを保持するビュー コントローラーに UITextViewDelegate を実装する必要があります。次に、このビュー コントローラーを各 UITextView のデリゲートにします。ここで実装方法をお読みください: UITextViewDelegate リファレンス。
ニーズにより適したプロトコル メソッドを探します (おそらく、textView:shouldChangeTextInRange:replacementText: で、任意の範囲でテキストが変更されるたびに呼び出されます。
デリゲート メソッドでは、UITextView.text プロパティを使用してテキストを読み取り、この値をデータ モデル (辞書) に割り当てることができます。
もう 1 つの可能なアプローチは KVO パターンを使用することですが、それにはより多くのコーディングが必要であり、パターンと実装の両方をよりよく理解する必要があります。それが役に立てば幸い!
かなり単純な方法は、テーブルのインデックス パスを利用することです。これは最もクリーンではないため、データソースの複雑さや、複数のテーブルがある場合などによって異なります。
できることは、ユーザーが textView の編集を終了するか、tableView で別の行を選択したときに、選択した行の indexPath を読み取ることです (これには、textView を編集している間、行が実際に選択された状態のままである必要があります)。 . そこから update メソッドを呼び出します。
実装する編集の終わりをキャッチするには
-(void)textViewDidEndEditing:(UITextView *)textView
{
NSIndexPath *selectedpath = [myTable indexPathForSelectedRow];
[self myUpdateMethodForIndexPath:selectedpath];
}
テーブル行の選択解除をキャッチし、上記が呼び出されないようにするには、実装します
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self myUpdateMethodForIndexPath:indexPath];
}
update メソッドは、indexPath の対応するセルで textView の値を読み取り、データソースでこれを処理する必要があります。もちろん、セクションを処理するには、indexPath を正しく処理する必要があります。この例では、行だけが使用されています (1 セクション)。
-(void)myUpdateMethodForIndexPath:(NSIndexPath *)editPath
{
UITableViewCell *editCell = [myTable cellForRowAtIndexPath:editPath];
NSString *newText = editCell.theTextView.text;
....
NSMutableDictionary *dict = [myDictArray objectAtIndex:editPath.row];
....
}
ビュー コントローラーを各テキスト ビューのデリゲートにします。適切なイベントをリッスンして、更新されたテキストを取得します。次に、View Controller に、更新されたテキストでデータ モデルを更新させます。
カスタム セルがある場合は、そのセルをテキスト ビュー デリゲートにします。次に、セルはデリゲート (View Controller) に更新されたテキストについて通知する必要があります。もちろん、これにはカスタム セル クラスが独自のデリゲート プロトコルを定義し、View Controller が各セルのデリゲートになる必要があります。
それは、そのような漠然とした質問に対する答えと同じくらい具体的です。