iOS5 меняет фон UIToolbar - PullRequest
       2

iOS5 меняет фон UIToolbar

2 голосов
/ 29 ноября 2011

Я прочитал документацию «Что нового в iOS 5» и там сказано, что изменение фона некоторых элементов интерфейса теперь лучше поддерживается.

Я не смог найти правильный способ для iOS 5 изменить фоновое изображение UIToolbar. Есть ли новый iOS 5 способ сделать это? Или мне все еще нужно создать подкласс UIToolbar?

Ответы [ 2 ]

13 голосов
/ 29 ноября 2011

Да, есть новый способ сделать это. Вы можете использовать appearance, чтобы все UIToolBar выглядели одинаково.

Во-первых, вы должны убедиться, что ваш класс следует протоколу UIAppearanceContainer. Здесь я сделал это в моем делегате приложения:

@interface AppDelegate : UIResponder <UIApplicationDelegate, UIAppearanceContainer>

@property (strong, nonatomic) UIWindow *window;

@end

Затем вы можете установить внешний вид, например, application:didFinishLaunchingWithOptions: или viewDidLoad. Как это:

UIImage *image = [UIImage imageNamed:@"myimage.png"];
[[UIToolbar appearance] setBackgroundImage:image forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];

Вам нужно сделать это только один раз, чтобы получить одинаковый внешний вид для всех UIToolBar в вашем приложении. Вы также можете установить многие (если не все?) Свойства вашего UIToolBar.

Как примечание, есть много классов, которые могут следовать протоколу UIAppearanceContainer. Чтобы выяснить, что можно настроить с помощью протокола внешнего вида, вы можете открыть файл заголовка класса, который вы хотите настроить. Если вы можете установить свойство с помощью UIAppearance, то после объявления свойства будет записано UI_APPEARANCE_SELECTOR.

2 голосов
/ 29 ноября 2011

Вот отличный учебник: http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5

По сути, это выглядит так:

UIImage *gradientImage32 = [[UIImage imageNamed:@"surf_gradient_textured_32"] 
    resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

[[UINavigationBar appearance] setBackgroundImage:gradientImage32 
    forBarMetrics:UIBarMetricsDefault];
...