iPhone - UITableView фоновое изображение загружается только на каждой второй сборки - PullRequest
0 голосов
/ 31 декабря 2010

Это сводит меня с ума.

Я создаю приложение для iPhone, и в моем контроллере корневого представления у меня есть UITableView.В viewDidLoad я установил фоновое изображение для этой таблицы следующим образом:

[self.view setBackgroundColor:[UIColor blackColor]];// this is so that I can see when the table background image does not show up.
UIImageView* backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"whiteBackground.png"]];
[backgroundView setFrame:CGRectMake(0, 0, 320, 460)];
[self.table setBackgroundView:backgroundView];
[backgroundView release];

Мои ячейки table прозрачны (или имеют сами фоновые изображения).

Это работает каждый раз Я создаю приложение и запускаю его как на симуляторе, так и на реальном устройстве.Он будет отображаться нормально, тогда, когда я соберу снова, он покажет только черный фон (но у вызовов таблицы есть свои фоновые изображения / прозрачность).

Кто-нибудь когда-либо сталкивался с чем-то подобным раньше?Тот факт, что он выбирается и отображается каждую вторую сборку, заставляет меня думать, что в памяти что-то скрывается.

Когда я запускаю его на устройстве / симуляторе, а затем нормально завершаю приложение (дважды нажмите домой, нажмитезначок и нажмите закрыт), а затем запустить его снова работает нормально.Кажется, что-то связано с тем, чтобы убивать приложение, когда я создаю его каждый раз.Обратите внимание, что я использую тот же самый точный код на другом контроллере представления, и он работает каждый раз, но на этом он не работает - мой корневой контроллер представления.

Ответы [ 2 ]

0 голосов
/ 01 января 2011

Я бился головой о стену, чтобы исправить это, и обнаружил несколько вещей (как упоминалось в моем ответе на ответ Эндрю Эблинга).Это больше, чем просто фоновое изображение.

Мой проект настроен так:

UIViewController с XIB.
Перетащите tableView в XIB.
Link upделегат и источник данных для UIViewController.
Создайте IBOutlet UITableView с именем 'table'.
Соедините это в IB.

Это всегда хорошо работало для меня.Но что-то странное происходит с моим «настольным» IBOutlet, который распознается в 50% случаев.Каждые секунды раз, когда я строю его, он не распознается, и reloadData не запускается всякий раз, когда я его вызываю.Он загружает таблицу в первый раз (что означает, что источник данных не поврежден), и ячейки могут быть выбраны (что означает, что делегат в порядке), но все селекторы, отправленные в «таблицу», игнорируются.

Это происходит только в RootViewController.Не на любых последующих контроллерах представления, в которых я использую этот способ работы.

Поэтому я просто изменил класс моего RootViewController на UITableViewController, соответственно изменил XIB (замените объект uiview на uitableview и установите файлвладелец просмотра собственности на UItableview).По сути, я просто вернулся к тому, что дает XCode, когда вы указываете новый файл с подклассом UITableViewController и XIB для пользовательского интерфейса.

Таким образом, я использую self.tableView для перезагрузки вместо моего собственного IBOutlet, и это работаетхорошо.

Я понятия не имею, что вызвало это, хотя и хотел бы знать, если это ошибка или нет.

0 голосов
/ 31 декабря 2010

Видите ли вы то же самое, если вместо этого переместить этот код в viewWillAppear?

FWIW, было бы лучше установить backgroundView.frame в self.table.bounds, а не жестко кодировать его размеромэкран.

...