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

时间:2012-09-17 09:25:41

标签: iphone objective-c ios uiimagepickercontroller

我设法改变了navigation bar的颜色,但按钮的颜色仍然是黑色。有没有办法改变按钮的颜色?见下图。

更新:由于版权问题,我们不得不删除该图片。

9 个答案:

答案 0 :(得分:21)

没有您的自定义图片是不可能的。

但是您应该在创建导航控制器后立即更改色调颜色:

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

答案 1 :(得分:1)

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

用于隐藏导航栏:

 self.navigationController.navigationBarHidden=YES;

然后在XIB中: 创建一个44高度的视图,在其上放置imageview并在其上放置2个按钮和1个标签。

希望这可以解决您的问题。

答案 2 :(得分:1)

如果您想影响所有视图中出现的按钮的颜色,例如您希望更改的按钮的颜色,那么只需使用以下内容:

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

答案 3 :(得分:1)

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if ([navigationController isKindOfClass:[UIImagePickerController class]]) {
        if ([[UIDevice currentDevice] systemVersion].floatValue >= 8.0) {
            [viewController.navigationController.navigationBar setBarTintColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"navbar1"]]];
        } else {
            [viewController.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar2"] forBarMetrics:UIBarMetricsDefault];
        }
    viewController.navigationController.navigationBar.tintColor = [UIColor whiteColor];
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
    titleLabel.textColor = [UIColor whiteColor];
    titleLabel.textAlignment = NSTextAlignmentCenter;
    titleLabel.font = [UIFont boldSystemFontOfSize:18.0f];
    titleLabel.text = @"photos";
    [viewController.navigationItem setTitleView:titleLabel];
    viewController.edgesForExtendedLayout = UIRectEdgeNone;
    }
}

答案 4 :(得分:0)

从iOS 5开始,您可以使用新的UIAppearance API实现所需的自定义。这个tutorial基本上向您展示了如何。

答案 5 :(得分:0)

您必须为BarButtonItem定义UIButtonTypeCustom按钮。

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

有关详细信息,请查看此帖子:UIBarButtonItem with color?

答案 6 :(得分: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];

答案 7 :(得分:0)

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

答案 8 :(得分:0)

使用UIAppearance的一个班轮:

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