3

UITableViewユーザー定義の数に分割された がありますsections。これらのそれぞれsectionsには、常に 2 がありrowsます。これら 2 つのそれぞれには、ユーザーが編集できる がrows含まれています。UITextField

私が必要としているのはUITextFields、後でこれらのデータにアクセスできる方法です。簡単な問題だと思っていましたが、かなりの悲しみを引き起こしています。

これまでのところ、次の 2 つのアプローチを試しました。

試行 1

オブジェクトをインデックス i (元の に対応)NSMutableArraysに追加した2 つを作成しました。次に、配列を反復処理して値にアクセスしようとしました。これはうまくいきませんでした。テーブルを下にスクロールして が表示されなくなるたびに、戻ると内容が消去されています。UITextFieldsectionUITextFieldsUITextField

試行 2

の数を把握しようとしsectionsましたUITableView(これで問題ありませんでした)。section次に、それぞれの を反復処理して、それぞれの にUITableView値を記録したいと思いましたrows。これを行う方法がわからない、または可能かどうかさえわからないため、ここで行き詰まりました。

初歩的な質問で申し訳ありませんが、本当に困っているのでアドバイスをいただければ幸いです。

4

3 に答える 3

4

スクロールするとテキスト フィールドが再利用されるため、テキスト フィールドへの参照を保存したくないことに注意してください。

代わりに行うことは、入力された情報をキャプチャすることです。これを行う最も簡単なtextFieldDidEndEditing方法は、デリゲートにプロトコル メソッドを実装することです。

注意が必要な部分は、テキスト フィールドがどの行にあるかを把握することです。最良の方法は、プロパティUITableViewCellを持つサブクラスを作成することです。NSIndexPathでセルを構成するときに、それを設定できますtableview:willDisplayCell:forRowAtIndexPath:

次に、textFieldDidEndEditing で、そのスーパービューを介して tableViewCell indexPath プロパティにアクセスします。すなわち:

NSIndexPath indexPathOfParentCell = [(MyUITableViewCellSubclass *)self.superview indexPath]; 

このようにすると、セルのセクションと行の両方を知ることができます。

于 2012-05-30T16:58:16.587 に答える
1

テーブルの cellForRow に TextField を作成し、タグを付けます

    UITextField * userField = [[[UITextField alloc] initWithFrame:CGRectMake(0, 12, self.view.frame.size.width -20, 20)] autorelease];
    userField.tag = 1001;
    userField.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:14];
    userField.textAlignment = UITextAlignmentCenter;
    userField.delegate = self;
    userField.autocorrectionType = UITextAutocorrectionTypeNo;
    userField.autocapitalizationType = UITextAutocapitalizationTypeNone;
    userField.clearButtonMode = UITextFieldViewModeWhileEditing;

    if (indexPath.row == 0)
        [cell.contentView addSubview:userField];  

次に、次のように TextField にアクセスします。

    UITextField *userField = (UITextField *)[[(UITableViewCell *)[(UITableView *)tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] contentView] viewWithTag:1001];
于 2012-05-30T17:10:32.010 に答える
0

テキストフィールド自体ではなく、テキストフィールドのテキストを配列に保持している場合、「試行1」は正常に機能するはずです。(ビューまたはコントロールをデータ オブジェクトにしようとするものはすべて、失敗する可能性が高くなります。)

テーブル ビューのデータ ソースとして機能するものは、コンテンツが個別に保存されている場合、セクションと行に従ってスクロールされたセルを再入力できる必要があります。

于 2012-05-30T17:00:39.917 に答える