Индивидуальная кнопка «Назад» появляется на UIImagePickerController

Я использую следующий код для настройки кнопки «Назад» на панели навигации во всем приложении:

UIImage *backButton = [[UIImage imageNamed:@"backButton"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
UIImage *backButtonOn = [[UIImage imageNamed:@"backButton_on"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButton
                                                  forState:UIControlStateNormal
                                                barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonOn
                                                  forState:UIControlStateHighlighted
                                                barMetrics:UIBarMetricsDefault];

Он отлично работает, за исключением случаев, когда я представляю UIImagePickerController и ввожу альбом в библиотеку фотографий, кнопка «Назад» также является настраиваемой кнопкой «Назад». Как я могу вернуть исходную кнопку «Назад» в средстве выбора изображений?


person SolidSun    schedule 15.11.2012    source источник


Ответы (3)


Попробуйте использовать это:

    [[UINavigationBar appearanceWhenContainedIn:[YourClassThatsNotAUIImagePicker class], nil] setBackButtonBackgroundImage:someOtherImage forBarMetrics:UIBarMetricsDefault];

Это должно ограничить настройку внешнего вида только перечисленными вами классами и, следовательно, оставить UIImagePickerController в покое.

person HackyStack    schedule 15.11.2012
comment
Я решил проблему, создав собственный подкласс UINavigationBar и используя его в своем навигационном контроллере. Затем я использовал предложенный метод [UINavigationBar appearanceWhenContainedIn:[MyNavigationBar class], nil]. Таким образом, мне нужно было только добавить класс панели навигации. Было быстрое решение, спасибо. - person SolidSun; 16.11.2012

 [[UIBarButtonItem appearanceWhenContainedIn:[UIImagePickerController class], nil] setBackButtonBackgroundImage:[UIImage imageNamed:@"blank-button"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

это правильный путь

person iMeMyself    schedule 26.07.2013
comment
Определенно лучший ответ здесь. - person Marco Tolman; 01.08.2013

1. для swift и ios9 (приведенный выше ответ будет таким) --

    UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UIImagePickerController.self]).setBackButtonBackgroundImage(UIImage(named: "blank-button"), forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)

2.если вы хотите изменить backIndicatorImage UINavigationBar

UINavigationBar.appearanceWhenContainedInInstancesOfClasses([UIImagePickerController.self]).backIndicatorImage = UIImage(named: "backButton")//or nil

3.если вы хотите изменить backIndicatorTransitionMaskImage

UINavigationBar.appearanceWhenContainedInInstancesOfClasses([UIImagePickerController.self]).backIndicatorTransitionMaskImage =UIImage(named: "backButton")// nil
person Ajay Singh Thakur    schedule 17.03.2016
comment
Внешний вид UINavigationBar не работает, когда содержится в UIImagePickerController. UIBarButtonItem работает нормально. - person kelin; 24.01.2018