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

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

Начиная с проекта Master/Detail по умолчанию с использованием Core Data. Настройте внешний вид UIButton в AppDelegate и запустите приложение. Нажмите кнопку Edit, затем кнопку Done на панели навигации для 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.
Когда кнопка Edit заменяется кнопкой Done, она корректно не имеет настроенного фона.

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

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

7
задан Community 23 May 2017 в 10:32
поделиться