Iphone 如何更改UIImagePickerController导航栏上的按钮颜色?

Iphone 如何更改UIImagePickerController导航栏上的按钮颜色?,iphone,objective-c,ios,uiimagepickercontroller,Iphone,Objective C,Ios,Uiimagepickercontroller,我已成功更改了导航栏的颜色,但按钮的颜色仍然是黑色。还有什么办法可以改变按钮的颜色吗?见下图 更新:很抱歉,由于版权问题,不得不删除图像。从iOS 5及以后,您可以使用新的UIAppearanceAPI实现所需的自定义设置。这基本上向您展示了如何操作。没有自定义图像是不可能的 但创建导航控制器后,应立即更改色调颜色: UIImagePickerController *pickerImg = [[UIImagePickerController alloc] init]; pickerImg.na

我已成功更改了
导航栏的颜色
,但按钮的颜色仍然是黑色。还有什么办法可以改变按钮的颜色吗?见下图


更新:很抱歉,由于版权问题,不得不删除图像。

从iOS 5及以后,您可以使用新的
UIAppearance
API实现所需的自定义设置。这基本上向您展示了如何操作。

没有自定义图像是不可能的

但创建导航控制器后,应立即更改色调颜色:

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

您必须为您的BarButtonItem定义UIButtonTypeCustom按钮

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

有关更多信息,请参阅此帖子:

您可以隐藏导航栏,并使用imageview创建自定义导航栏,并在其上放置2个按钮。通过此操作,您还可以根据需要更改按钮的图像/颜色以及图像视图

用于隐藏导航栏:

 self.navigationController.navigationBarHidden=YES;
然后在XIB中: 创建44高度的视图,将imageview放置在其上,并在其上放置2个按钮和1个标签


希望这能解决您的问题。

@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]];
    }
}

如果要影响所有视图(如希望更改的视图)中显示的按钮的颜色,只需使用以下命令:

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]];

我希望它能帮助你

步骤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];

如果您不介意在整个应用程序中使用相同的样式,请使用@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()

一个使用UIS外观的衬里:

[[UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[UIImagePickerController class]]] setTintColor:[UIColor redColor]];

到目前为止你试过什么?如何设置导航栏的背景?我自己还没有试过,但是我想到了,UIAppearance。@Pfitz UIAppearance只适用于ios 5.0及以上版本,但我的目标是ios 4.0及以上版本,所以我不认为这是一个选项。您可能需要创建自己的一组按钮并将它们放在导航栏上。另一种方法是覆盖条形按钮项的drawrect方法。是的,您是对的,您不能更改uiimagepickerController上按钮的颜色,但可以使用overlay控件类创建自定义imagePickerController。作为参考,您可以查看此链接:+1以了解有趣的方法,但我不认为这是一种方式。对于我的场景,由于照片库深入到子文件夹中,我无法使用tintColor,因为我的目标是ios 4.0及更高版本。添加一点文字注释或关于您为使其工作所做更改的信息如何?仅仅粘贴代码没有多大意义,或者你是在问,是不是要检查代码的每一行并吞下它?
[[UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[UIImagePickerController class]]] setTintColor:[UIColor redColor]];