2

つまり、セルのデフォルトbackgroundViewを復元する必要があります。UITableViewStyleGrouped

cell.backgroundView = ??;

長い話:いくつかのセルを含むグループ化されたテーブルビューがあります。すべてのセルに対して、ユーザーは何らかの値を選択するか、何らかの入力を行う必要があります。その後、「次へ」ボタンを押すことで、次の ViewController に進むことができます。

とにかく、何かを見逃したことをユーザーに示すために、間違った/欠落しているユーザー入力を含むセルの周りに素敵な赤い境界線を表示します。これを行うにbackgroudViewは、セルの を次のようなカスタム イメージで設定します。

cell.backgroundView = myErrorIndicatingImageView;

セルは次のようになります (スクリーンショット、星とラベルは無視してください) ここに画像の説明を入力

これまでのところ、これは魅力のように機能します。しかし、ユーザーが入力を修正した後、赤い枠の背景画像を削除して、元の背景を再度表示したいと思います。元の背景は次のようになります (スクリーンショット): ここに画像の説明を入力

そして、これは問題のようです。

私はいくつかのことを試しました

// try by setting the background to nil
cell.backgroundView = nil;

これにより、背景が完全に削除され、背景のないセルで迷子になります。

// try it with addSubview and later remove the subview again
[cell.backgroundView addSubview:myErrorIndicatingImageView];

これは何もしません。はmyErrorIndicatingImageView表示されません。でさえ[cell.backgroundView bringSubviewToFront:myErrorIndicatingImageView]助けにはなりません。

現在、私が持っている唯一の解決策は、へのUITableViewCell呼び出しごとに新しいを作成することcellForRowAtIndexPathです。これは機能しますが、単に悪いコードであり、セルを再利用する手法を完全に無視しています。

もっと簡単な解決策があるはずです...次のようなもの

cell.backgroundView = [self.tableView getDefaultBackgroundView];
4

2 に答える 2

0

カスタムテーブルセルクラスを使用してこれを行っていると仮定して、元のテーブルbackgroundViewをいくつかのivarに保存してから、新しい背景を適用します。背景をリセットする場合はbackgroundView、元の保存された背景ビューに戻します。

于 2013-02-23T16:21:20.397 に答える
0

これを試してみてはどうですか:

cell.backgroundView = [[UIView alloc] initWithFrame:cell.backgroundView.frame];

または、背景ビューを としてUIImageView作成し、問題と修正で 2 つの画像を設定することもできます

于 2013-02-23T11:27:12.270 に答える