があり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 が各セルのデリゲートになる必要があります。
それは、そのような漠然とした質問に対する答えと同じくらい具体的です。