0

JSONによって構築された配列に基づいて、動的な量のセルを含むテーブルビューがあります。

tableData = [NSJSONSerialization JSONObjectWithData:dataWebService options:kNilOptions error:&error];

この小さな行は、テーブルビューを構築するために必要なすべてのデータを取得します。

テーブルビューでは、JSON から事前定義されたテキストを含むすべてのセルにテキスト フィールドがあります。ユーザーは、次のセグエ (ストーリーボード) に進む前に、この値を変更できます。

tableData問題は、この arraobject を次のセグエに送信する前に、このユーザー型の値を配列に格納し、配列内の既存の値を置き換える方法です。

また、ユーザーがテーブルビューをスクロールするときにユーザー入力を変更してはならないことに注意してください。

これは基本的なことかもしれませんが、これを行う良い方法がわかりません。

これは JSON の例です。

(
    {
    defaultval = 8;
    dtype = long;
    id = "@franr";
    label = "Faktura nr.";
},
    {
    defaultval = 8;
    dtype = long;
    id = "@tilnr";
    label = "Til faktura";
}

テーブルビューは次のようになります: (画像を投稿できません)

Fra faktura 8 Til faktura 8

ユーザーは値 (数値 8) を任意の数値に変更できます。したがって、JSON 配列の defaultVal の数値を置き換える必要があります。

ありがとう。

4

2 に答える 2

0

UITEXTFIELD であるため、OnTextChange イベントを使用できます

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; 

また

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range     
                  replacementString:(NSString *)string

、またはフォーカスを失う

- (BOOL)textFieldShouldReturn:(UITextField *)textField

テキストフィールドのデリゲートを自分自身に設定し、それぞれのプロトコルを追加する必要があることに注意してください。

于 2012-12-19T21:06:50.173 に答える
0

スクロール後にデータを保持するには、ユーザーからの入力ごとにデータ ソース (配列) を変更する必要があります。UITextFieldDelegate のtextFieldDidEndEditing:メソッドで dis を実行できます (もちろん、各テキスト フィールドのデリゲートになる必要がありますtextField.delegate = self;)。テーブルがスクロールを開始したときにキーボードを閉じるために、UIScrollViewDelegate メソッドも実装する必要があります (例: scrollViewWillBeginDragging:)。

編集:

配列には変更できない NSDictionaries が含まれている必要があるため、これらの属性 (defaultval、dtype ...) を持つ独自のクラスを作成して、データ ソースを編集できるようにすることをお勧めします。現在のように配列を変更できるとは思いません。

カスタム オブジェクトを含むコードは次のようになります。

- (void)textFieldDidEndEditing:(UITextField *)textField {
    UITableViewCell *cell = textField.superview.superview;
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
    MyObject *currentObject = [tableData objectAtIndex:indexPath.row];
    currentObject.defaultVal = textField.text.intValue;
}
于 2012-12-19T21:07:43.417 に答える