2012-09-17 77 views
8

He logrado cambiar el color de navigation bar pero el color de los botones sigue siendo negro. ¿Hay alguna manera de cambiar el color de los botones también? Ver la imagen de abajo.¿Cómo cambiar el color del botón en la barra de navegación UIImagePickerController?

ACTUALIZACIÓN: Lo sentimos, tuvimos que eliminar la imagen debido a la copia correcta.

+0

¿Qué has intentado hasta ahora? ¿Cómo logras establecer el fondo de la barra de navegación? No lo he probado pero me viene a la mente 'UIAppearance' ... – Pfitz

+0

@Pfitz UIAppearance funcionaría solo con iOS 5.0 y superior, pero estoy apuntando a iOS 4.0 –

Respuesta

0

Puede lograr las personalizaciones deseadas utilizando las nuevas API UIAppearance a partir de iOS 5 en adelante. Este tutorial esencialmente muestra cómo.

+0

Me estoy orientando a 4.0 y superior, así que no creo que sería una opción –

+0

Entonces podría tener que crear su propio conjunto de botones y colocarlos en la barra de navegación. Otra forma es anular los métodos drawrect para el elemento del botón de la barra. – Bourne

21

No es posible sin su imagen personalizada.

pero se debe cambiar el color de la tinta tan pronto como se crea el controlador de navegación:

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

tiene que definir un botón UIButtonTypeCustom para su BarButtonItem.

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

Para obtener más información, echar un vistazo a este post: UIBarButtonItem with color?

1

puede ocultar la barra de naviagtion, y crear una barra de navagtion personalizado utilizando imageview y colocar 2 botones en it.By hacer esto puede cambiar la imagen/color de los botones, así como la vista de imagen también según su requisito.

para ocultar la barra de navegación:

self.navigationController.navigationBarHidden=YES; 

entonces en XIB: crear una vista de 44 altura, lugar imageview en él y coloque 2 botón y 1 etiqueta en él.

Esperamos que esto solucione su problema.

+0

Esto no funcionará con UIImagePickerController –

+0

sí tiene razón, no puede cambiar el color de los botones en uiimagepickerController, pero puede crear un imagePickerController personalizado mediante el uso de clases de control de superposición. para referencia, puede consultar este enlace: http: //www.devsrealm.com/objective-c/custom-camera-app-1/ – megha

+0

La vista de superposición funciona solo para la cámara, no para la biblioteca de fotos. –

1

@Ankit Puede intentar obtener las subvistas desde la barra de navegación y luego establecer el color deseado. Usé este enfoque para establecer el color del botón cancelar en la barra de búsqueda. El tamaño del botón cancelar es 48 * 30 y puede usar el conjunto de subvistas para establecer el color deseado. No estoy seguro pero esto puede hacer el trabajo. A continuación se muestra el código que utilicé para configurar el color del botón cancelar en la barra de búsqueda.

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]]; 
    } 
} 
+0

+1 para un enfoque interesante, pero no creo que este sea el camino a seguir. –

+0

@AnkitSrivastava ¿Has probado este enfoque? – Singh

+0

a complicado para mi escenario, ya que la biblioteca de fotos profundiza en las subcarpetas y no puedo usar tintColor ya que me estoy enfocando en iOS 4.0 y superior. –

1

Si desea afectar el color de los botones que aparecen en todas las vistas, como el que usted está esperando para cambiar, a continuación, sólo tiene que utilizar el siguiente:

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

espero que le ayudará ¡tú!

Paso 1:

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

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

Si no te importa usar el mismo estilo en toda la aplicación, el uso aparición como @Bourne sugirió:

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

También puede cambiar el color de fondo de la barra de navegación si está usando un color blanco como yo:

 picker.navigationBar.barTintColor = .redColor() 
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; 
    } 
} 
+1

¿Qué tal si agregas un poco de nota de texto o información sobre qué cambio hiciste para que funcione? Simplemente pegar el código no tiene mucho sentido, ¿o está pidiendo que revise cada línea de su código y lo trague? –

0

Un revestimiento utilizando UIAppearance:

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