Как изменить цвет кнопки на панели навигации UIImagePickerController?

Мне удалось изменить цвет navigation bar, но цвет кнопок по-прежнему черный. Есть ли способ изменить цвет кнопок? См. изображение ниже.

ОБНОВЛЕНИЕ: Извините, пришлось удалить изображение из-за проблем с копированием.


person Ankit Srivastava    schedule 17.09.2012    source источник
comment
что ты уже испробовал? Как вам удается установить фон панели навигации? Сам не пробовал, но UIAppearance приходит на ум...   -  person Pfitz    schedule 17.09.2012
comment
@Pfitz UIAppearance будет работать только с iOS 5.0 и выше, но я ориентируюсь на iOS 4.0.   -  person Ankit Srivastava    schedule 17.09.2012


Ответы (10)


Это невозможно без вашего пользовательского изображения.

но вы должны изменить цвет оттенка, как только создадите навигационный контроллер:

 UIImagePickerController *pickerImg = [[UIImagePickerController alloc] init];
pickerImg.navigationBar.barStyle = UIBarStyleBlackOpaque; // Or whatever style.
// or
pickerImg.navigationBar.tintColor = [UIColor whateverColor];
person Jerry Thomsan    schedule 17.09.2012

вы можете скрыть панель навигации и создать настраиваемую панель навигации с помощью изображения и разместить на ней 2 кнопки. Делая это, вы можете изменить изображение/цвет кнопок, а также вид изображения также в соответствии с вашими требованиями.

для скрытия панели навигации:

 self.navigationController.navigationBarHidden=YES;

затем в XIB: создайте представление высотой 44, поместите на него изображение и поместите на него 2 кнопки и 1 метку.

Надеюсь, это решит вашу проблему.

person megha    schedule 17.09.2012
comment
да, вы правы, вы не можете изменить цвет кнопок в uiimagepickerController, но вы можете создать собственный imagePickerController, используя классы контроллера наложения. для справки вы можете проверить эту ссылку: devsrealm.com/objective-c /пользовательское-камера-приложение-1 - person megha; 17.09.2012

@Ankit Вы можете попробовать получить подвиды с панели навигации, а затем установить нужный цвет. Я использовал этот подход, чтобы установить цвет кнопки отмены в строке поиска. Размер кнопки отмены составляет 48 * 30, и вы можете использовать массив подвидов, чтобы установить желаемый цвет. Я не уверен, но это может помочь. Ниже приведен код, который я использовал для установки цвета кнопки отмены в строке поиска.

NSArray *arrySearchSubviews=[searchBarFrnds subviews];
for (UIButton *btn in arrySearchSubviews) 
{
   CGRect rect=btn.frame;
    NSLog(@"width %f",rect.size.width);
    NSLog(@"height %f",rect.size.height);
    if (rect.size.width==48 ) 
    {
        [btn setTintColor:[UIColor colorWithRed:0 green:0.403f blue:0.4f alpha:1.0f]];
    }
}
person Singh    schedule 17.09.2012
comment
+1 за интересный подход, но я не думаю, что это правильный путь. - person Ankit Srivastava; 17.09.2012
comment
слишком сложно для моего сценария, так как библиотека фотографий разбивается на подпапки, и я не могу использовать tintColor, поскольку я ориентируюсь на ios 4.0 и выше. - person Ankit Srivastava; 17.09.2012

Если вы хотите изменить цвет кнопок, которые отображаются во всех представлениях, таких как тот, который вы надеетесь изменить, просто используйте следующее:

UIBarButtonItem *searchBarButton = [UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil];
[searchBarButton setTintColor:[UIColor colorWithRed:138.0/255.0 green:183.0/255.0 blue:64.0/255.0 alpha:1.0]];
person Oscar    schedule 26.03.2013

Я надеюсь, что это поможет вам!

Шаг 1:

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
[self presentViewController:picker animated:YES completion:NULL];

Шаг 2:

/* Status bar color */
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
/* Left button */
navigationController.navigationBar.tintColor = [UIColor blackColor];
/* Right button color  */
navigationController.navigationBar.topItem.rightBarButtonItem.tintColor = [UIColor blackColor];
person Vlad Smelov    schedule 19.01.2015

Вы можете добиться желаемых настроек с помощью новых UIAppearance API, начиная с iOS 5 и более поздних версий. В этом учебнике показано, как это сделать.

person Bourne    schedule 17.09.2012
comment
Я ориентируюсь на 4.0 и выше, поэтому не думаю, что это вариант. - person Ankit Srivastava; 17.09.2012
comment
Тогда вам, возможно, придется создать собственный набор кнопок и разместить их на панели навигации. Другой способ — переопределить методы drawrect для кнопки панели. - person Bourne; 17.09.2012

Вы должны определить кнопку UIButtonTypeCustom для вашего BarButtonItem.

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIBarButtonItem *yourBarButton = [[UIBarButtonItem alloc] initWithCustomView:button];

Для получения дополнительной информации взгляните на этот пост: UIBarButtonItem с цветом?

person andreasgasser    schedule 17.09.2012

Если вы не против использовать один и тот же стиль во всем приложении, используйте внешний вид, как предложил @Bourne:

    let font = UIFont(name:"Montserrat-Bold", size:16)!
    let attributes: LTDictStrObj = [
        NSForegroundColorAttributeName: UIColor.whiteColor(),
        NSFontAttributeName: font,
    ]
    UIBarButtonItem.appearance().setTitleTextAttributes(attributes, forState: UIControlState.Normal)

Вы также можете изменить цвет фона панели навигации, если вы используете белый цвет, как я:

        picker.navigationBar.barTintColor = .redColor()
person superarts.org    schedule 13.05.2015

Один лайнер с использованием UIAppearance:

[[UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[UIImagePickerController class]]] setTintColor:[UIColor redColor]];
person PakitoV    schedule 27.10.2017

person    schedule
comment
Как насчет добавления небольшого текстового примечания или информации о том, какие изменения вы внесли, чтобы заставить его работать? Просто вставлять код не имеет особого смысла, или вы просите просмотреть каждую строку вашего кода и проглотить его? - person Clain Dsilva; 07.07.2015