Почему - [[Появление UIButton] setBackgroundImage] влияет на начальный вид объектов UIBarItem и как вы это исправляете? - PullRequest
7 голосов
/ 05 января 2012

При настройке внешнего вида UIButton с использованием прокси-класса UIBarItems, кажется, изначально принимает пользовательские свойства, установленные для UIButton.

Начиная с проекта Master / Detail по умолчанию с использованием Core Data. Настройте внешний вид UIButton в AppDelegate и запустите приложение. Нажмите кнопку «Редактировать», затем кнопку «Готово» на панели навигации для MasterViewController и наблюдайте, как исчезают настройки.

Пользовательский код появления в [AppDelegate application: didFinishLaunchingWithOptions]:

UIImage *customBackground = [[UIImage imageNamed:@"yourcustomimage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5,5,5,5)];  
[[UIButton appearance] setBackgroundImage:customBackground forState:UIControlStateNormal];  

All UIBarButtonItems initialize with custom background.
Все UIBarButtonItems инициализируются с пользовательским фоном

When the Edit button is replaced by the Done button, it correctly does not have the customized background.
Когда кнопка «Правка» заменяется кнопкой «Готово», у нее правильно не будет настроенного фона.

Аналогичный вопрос спрашивает, как настроить кнопку Готово . Меня беспокоит, почему это вообще происходит с объектами UIBarItem, которые не наследуются от UIButton, и хотел бы знать, как это исправить.

Я подозреваю, что наследование прокси и поддерживаемые свойства, но я не знаю, как исправить это. Есть предложения?

1 Ответ

1 голос
/ 13 апреля 2013

Я бы предложил сбросить backgroundImage на nil, если он содержится в UINavigationBar:

[[UIButton appearance] setBackgroundImage:customBackground forState:UIControlStateNormal];
[[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setBackgroundImage:nil forState:UIControlStateNormal];
...