0

ボタンを押すと空にリセットする必要がある tableView のセルにテキスト フィールドとラベルがいくつかあります。テーブルがリロードされ、値を保持する必要がある状況があるため、reloadData 呼び出しで cellForRowAtIndexPath のすべてを @"" に設定することはできません。

したがって、唯一のオプションは、すべてのテキストフィールドまたはラベルを何らかの方法でループし、それらのテキストを個別に @"" に設定することです。しかし、セルにアクセスしてから、テキストフィールドまたはラベルを引き出すにはどうすればよいでしょうか? 私のテーブルもさまざまな種類のカスタムセルで構成されていることに注意してください。

おそらくタグを使用するのが最善だと思いましたが、セルの「viewWithTag」呼び出しにアクセスする方法がわかりません。そんなものさえあれば。

テキストフィールドが作成される場所に追加されたコードブロックを編集します

    BaseTableViewCell *baseCell = (BaseTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellWithIdentifier];
    if (baseCell == nil){
        baseCell = [[BaseTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellWithIdentifier];

        BaseTextField *rightText = [[BaseTextField alloc] initWithFrame:CGRectMake(150, 7, 150, 31)];
        rightText.placeholder = tableValues.key;
        rightText.font = [UIFont systemFontOfSize:14];
        rightText.tag = (indexPath.section + 1) + (indexPath.row + 1);
        rightText.delegate = self;
        [baseCell addSubview:rightText];
    }
    NSLog(@"resetting text");
    baseCell.selectionStyle = UITableViewCellSelectionStyleNone;
    baseCell.backgroundColor = [UIColor clearColor];
    baseCell.backgroundView = [[UIView alloc] initWithFrame:CGRectZero];
    baseCell.textLabel.text = tableValues.value;

    return baseCell;
}
4

5 に答える 5

2

このような問題は、「データ モデル」があり、それを「真実」として扱うと、自然に解決する傾向があります。つまり、テーブルビューのすべてのセルに常にデータを入力してください。単純な配列を 1 つまたは 2 つ持つことも、より複雑なものにすることもできます。何かをザッピングしたい場合は、モデル内の値をザッピングして、テーブルをリロードします。

このSO の回答は、そのようにしたい場合にテーブルビューをループするのに役立ちます。ただし、データを更新して reload tableview を呼び出すことをお勧めします。

于 2013-02-08T18:55:27.380 に答える
0

あなたが正しく質問していることを私が理解しているなら、あなたはセルにアクセスすることによってこれを行うのではなく、セルにデータを入れるために使用する配列を変更することによってこれを行います。カスタムオブジェクトの任意のフィールド、またはディクショナリの値(ディクショナリの配列を使用している場合)を@""に設定します。

于 2013-02-08T18:56:56.627 に答える
0

UIView には、設定できるタグ プロパティがあります。

UITextField *textField = [UITextField alloc] initWithFrame:CGRectMake(10, 10, 200, 28)];
textField.tag = 20;

通常、UITableView はセルを再利用するため、セルが別のコンテンツをリロードすると問題が発生する可能性があります。

テーブルビューとは別にデータを管理することを検討する必要があります。

于 2013-02-08T18:55:22.440 に答える
0

UITableView を使用する

- (NSArray *)visibleCells

これにより、すべてのセルが得られ、セルのサブビューをループしてラベルをリセットします。

于 2013-02-08T18:51:49.893 に答える
0

と呼ばれる UITableView プロパティがありますvisibleCells。これは、表示できるすべてのセルの配列です。変える必要があるのはそれだけですか?それ以外の場合は、すべてのセルをループして、テキスト フィールドを @"" に設定する必要があり-numberOfSectionsます-numberOfRowsInSection-cellForRowAtIndexPath:

于 2013-02-08T18:53:13.737 に答える