Как да променя цвета на бутона в навигационната лента на 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 /custom-camera-app-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