2013-02-23 2 views
1

Короче говоря,, мне нужно восстановить значение по умолчанию backgroundView для ячейки .Восстановить по умолчанию UITableViewCell backgroundView

cell.backgroundView = ??; 

Длинная история: У меня сгруппированный TableView с некоторыми клетками. Для каждой ячейки пользователь должен выбрать какое-то значение или сделать какой-либо ввод. После этого он может перейти к следующему ViewController, нажав кнопку «Далее».

В любом случае, чтобы указать пользователю, что он что-то пропустил, я показываю красивую красную рамку вокруг ячейки с неправильным/отсутствующим пользовательским вводом. Я делаю это, установив backgroudView ячейки с помощью пользовательского изображения, как это:

cell.backgroundView = myErrorIndicatingImageView; 

Клетка теперь выглядит так (скриншот, игнорировать звезды и этикетку) enter image description here

До сих пор так хорошо, это работает как шарм. Но после того, как пользователь исправил ввод, я хочу удалить свое фоновое изображение с красной рамкой и снова показать исходный фон. Оригинальный фон выглядит так (скриншот): enter image description here

И это, кажется, проблема.

Я попробовал несколько вещей

// 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]; 

ответ

0

насчет попробовать это:

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

Или вы можете сделать вид фона как UIImageView и установить 2 изображения в задаче и исправлено

+0

'cell.backgroundView = [[UIView alloc] initWithFrame: cell.backgroundView.frame];' имеет тот же эффект, что и установка backgroundView = nil; '. Он полностью удаляет фон. Использование двух UIImageViews было бы решением, но зачем воссоздавать фоновый фон по умолчанию, если система уже знает, как правильно его рисовать? –

+0

Как выглядит фон по умолчанию? ,Также попытался перезагрузить представление таблицы после сидения нового 'backgroundView' с помощью nil или' UIView alloc init', он может решить проблему –

+0

Я добавил несколько скриншотов к исходному вопросу. Вся моя логика уже находится в 'cellForRowAtIndexPath'. Итак, 'cellForRowAtIndexPath' решает, какой фон рисовать. Если мои вспомогательные методы хотят изменить фон, они вызывают '[self.tableView reloadData]'. Поэтому проблема заключается в том, что 'cellForRowAtIndexPath' уже создал ячейку раньше, и я повторно использую эту ячейку с' dequeueReusableCellWithIdentifier', тогда кажется невозможным установить исходный фон в ячейку, у которой установлен набор ошибок. –

0

Предполагая, что вы делаете это с помощью собственного класса ячеек таблицы, сохраните оригинал backgroundView в каком-нибудь ivar, затем примените новую спину земля. Когда вы хотите сбросить фон, установите backgroundView обратно в исходное сохраненное фоновое изображение.

Смежные вопросы