1

がありUITableView、それぞれUITableViewCellに編集可能な が含まれていますUITextView

私のデータ ソースは、テキスト値とテキストのいくつかのスタイリング キーを保持するコンテインですNSMutableArrayNSMutableDictionary

ユーザーが UITextView に加えた変更が対応する datasource で更新されるようにするにはどうすれば (効率的に) 作成できますNSMutableDictionaryか?

4

3 に答える 3

1

まず、どの UITextView を参照しているかを正確に知るために、各 UITextView にタグを割り当てる必要があります。

次に、テーブルビューを保持するビュー コントローラーに UITextViewDelegate を実装する必要があります。次に、このビュー コントローラーを各 UITextView のデリゲートにします。ここで実装方法をお読みください: UITextViewDelegate リファレンス

ニーズにより適したプロトコル メソッドを探します (おそらく、textView:shouldChangeTextInRange:replacementText: で、任意の範囲でテキストが変更されるたびに呼び出されます。

デリゲート メソッドでは、UITextView.text プロパティを使用してテキストを読み取り、この値をデータ モデル (辞書) に割り当てることができます。

もう 1 つの可能なアプローチは KVO パターンを使用することですが、それにはより多くのコーディングが必要であり、パターンと実装の両方をよりよく理解する必要があります。それが役に立てば幸い!

于 2013-06-01T23:23:44.717 に答える
1

かなり単純な方法は、テーブルのインデックス パスを利用することです。これは最もクリーンではないため、データソースの複雑さや、複数のテーブルがある場合などによって異なります。

できることは、ユーザーが 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];
 ....
}
于 2013-06-01T23:40:06.513 に答える
0

ビュー コントローラーを各テキスト ビューのデリゲートにします。適切なイベントをリッスンして、更新されたテキストを取得します。次に、View Controller に、更新されたテキストでデータ モデルを更新させます。

カスタム セルがある場合は、そのセルをテキスト ビュー デリゲートにします。次に、セルはデリゲート (View Controller) に更新されたテキストについて通知する必要があります。もちろん、これにはカスタム セル クラスが独自のデリゲート プロトコルを定義し、View Controller が各セルのデリゲートになる必要があります。

それは、そのような漠然とした質問に対する答えと同じくらい具体的です。

于 2013-06-01T23:05:48.767 に答える