Короче говоря,, мне нужно восстановить значение по умолчанию backgroundView
для ячейки .Восстановить по умолчанию UITableViewCell backgroundView
cell.backgroundView = ??;
Длинная история: У меня сгруппированный TableView с некоторыми клетками. Для каждой ячейки пользователь должен выбрать какое-то значение или сделать какой-либо ввод. После этого он может перейти к следующему 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];
'cell.backgroundView = [[UIView alloc] initWithFrame: cell.backgroundView.frame];' имеет тот же эффект, что и установка backgroundView = nil; '. Он полностью удаляет фон. Использование двух UIImageViews было бы решением, но зачем воссоздавать фоновый фон по умолчанию, если система уже знает, как правильно его рисовать? –
Как выглядит фон по умолчанию? ,Также попытался перезагрузить представление таблицы после сидения нового 'backgroundView' с помощью nil или' UIView alloc init', он может решить проблему –
Я добавил несколько скриншотов к исходному вопросу. Вся моя логика уже находится в 'cellForRowAtIndexPath'. Итак, 'cellForRowAtIndexPath' решает, какой фон рисовать. Если мои вспомогательные методы хотят изменить фон, они вызывают '[self.tableView reloadData]'. Поэтому проблема заключается в том, что 'cellForRowAtIndexPath' уже создал ячейку раньше, и я повторно использую эту ячейку с' dequeueReusableCellWithIdentifier', тогда кажется невозможным установить исходный фон в ячейку, у которой установлен набор ошибок. –