Доступ всюду к UIImageView, добавленному под UIWindow - PullRequest
1 голос
/ 31 марта 2011

В моем приложении для запуска приложения у меня есть следующий код:

[window addSubview:[myTabBarController view]];

UIImageView *banner = 
     [[[UIImageView alloc] initWithFrame:CGRectMake(0,381,320,50)] autorelease];
banner.backgroundColor = [UIColor redColor]; 

[window addSubview:banner];
[window makeKeyAndVisible];

Это работает, как ожидалось.Панель вкладок видима, а также мой UIImageView виден.

Мне нужно изменить это UIImageView везде в моем приложении (у меня есть TabBarController, NavigationController, UITableView и т. Д.)

Например, я хочу изменить цвет фона, когда нажимаю UITableCell.

Я перепробовал все: self.window.view.subviews, atObjectIndex, похоже, ни тот, ни другой не получают текущийцвет фона.

Ответы [ 2 ]

0 голосов
/ 31 марта 2011

Вы уверены, что хотите это сделать?

Обычно лучше расположить ваше приложение так, чтобы единственным объектом, управляющим иерархией представления контроллера представления, был этот контроллер представления. Если другие объекты хотят что-то изменить, они либо изменяют модель данных, либо отправляют сообщение в контроллер представления. Таким образом, вы могли бы дать своему контроллеру представления свойство 'backgroundColor', и его установщик обновил бы соответствующее представление. Косвенная установка цвета фона через контроллер представления упрощает внесение изменений в иерархию представлений в будущем и, как правило, обеспечивает лучшую организацию.

0 голосов
/ 31 марта 2011

Во-первых, вам не нужен UIImageView, если его просто установить цвет фона. UIView достаточно.

Чтобы решить вашу проблему, вы можете сохранить ссылку на представление, какой цвет фона вы хотите изменить в вашем AppDelegate. Затем вы можете получить доступ к AppDelegate (и к ссылке на ваше представление) из любой точки вашего приложения, например:

((YouAppDelegateName*)[UIApplication sharedApplication].delegate).yourViewReferenceProperty
...