2010-07-21 29 views
54

Me gustaría saber cómo configurar una imagen en un UIBarButtonItem que luego se agregará a una barra de UIT, mediante el uso de InitWithImage al crear un UIBarButtonItem.agregar imagen a UIBarButtonItem usando initWithImage: (UIImage *) imagen

que estoy haciendo lo siguiente, pero crea un espacio en blanco en blanco donde la imagen debe estar en el UIToolbar

UIImage *image = [UIImage imageNamed:@"6.png"]; 

UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(pp:)]; 

Gracias!

+0

¿Puede NSLog su imagen para asegurarse de que no es nula – vodkhang

+1

la imagen no es nula, he añadido la imagen a un UIImageView y mostrarlo en la pantalla. ¿Alguien puede verificar si hay un tipo especial de formato .png que funciona con UIBarButtonItem ??? –

+0

@ShumaisUlHaq Parece que esta pregunta necesita una mejor respuesta. Por favor échale un vistazo. – Vahan

Respuesta

40

me gustaría tratar de establecer

UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image.png"] style:UIBarButtonItemStylePlain target:self action:@selector(pp:)]; 
+2

¿por qué esta no es la publicación más importante? – John

+0

¿Por qué obtuvieron tantos upvotes? – jakedunc

+0

¿Me estoy perdiendo algo? no hay diferencia en el código en la pregunta y esta publicación? !! –

0

que estaba teniendo este problema también y lo resolvió mediante el uso de un archivo PNG con un canal alfa. Estaba tratando de hacer una maqueta rápida y agregué un botón Atrás con un archivo jpg en un fondo del color predeterminado de los botones. Tengo un rectángulo blanco. Pero cuando creé una flecha en un fondo transparente y la guardé como un archivo png, funcionó.

69

Aquí hay un ejemplo que crea un botón en la barra de herramientas del logotipo de Facebook. Cree un puntero a una imagen (archivo ya agregado a xCode), cree un botón personalizado, cambie el tamaño del botón para que coincida con la imagen, establezca la imagen del botón, cree el botón de la barra de herramientas desde la vista del botón.

UIImage *faceImage = [UIImage imageNamed:@"facebook.png"]; 
UIButton *face = [UIButton buttonWithType:UIButtonTypeCustom]; 
face.bounds = CGRectMake(0, 0, faceImage.size.width, faceImage.size.height); 
[face setImage:faceImage forState:UIControlStateNormal]; 
UIBarButtonItem *faceBtn = [[UIBarButtonItem alloc] initWithCustomView:face]; 
+0

gracias, está funcionando bien para mí, sugeriré usar este código – ravinder521986

+3

es bueno y aún mejor si desea agregar acción de destino a este botón ..hacer esto [cara agregarTarget: acción propia: @selector (faceBtnPressed) paraControEventos: UIControlEventTouchUpInside ] – AmJa

17

Desde el documentation of UIBarButtonItem:

Las imágenes que se muestran en la barra se derivan de esta imagen. Si esta imagen es demasiado grande para caber en la barra, se ajusta a escala. Por lo general, el tamaño de una barra de herramientas y la imagen de la barra de navegación es de 20 x 20 puntos. Los valores alfa en la imagen de origen se utilizan para crear las imágenes; los valores opacos se ignoran.

En otras palabras, el elemento UIBarButton va a ignorar el color de la imagen y volver a colorearla de acuerdo con el estilo de barra actual. La única forma en que mostrará una imagen es si la imagen se dibuja usando valores alfa variables. Como todos los píxeles de su imagen tienen un valor alfa de 1, todos se dibujan con el brillo máximo y obtiene un espacio en blanco.

+0

Mira mis dos soluciones a continuación, arreglan este problema. –

0

El UIBarbuttonItem initWithImage no creará un botón de barra con esa imagen especificada. Crea un patrón de un botón UIB usando la imagen dada. Si la imagen especificada no es transparente, mostrará un botón de barra con tintcolor especificado que tiene el tamaño de la imagen. Si la imagen tiene partes opacas, el color del tinte se rellenará en las partes opacas como el UIBarButtonSystemItemBookmarks predeterminado. Tiene un borde opaco y un lado interno transparente.

En su caso, el titncolor es blanco y por eso muestra blanco.

56

Y para iOS 7+ de hacer lo siguiente:

Objective-C

UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(YOUR_METHOD:)]; 

Swift 2,3

let image = UIImage(named: "myImage")?.imageWithRenderingMode(.AlwaysOriginal) 
let button = UIBarButtonItem(image: image, style: .Plain, target: self, action: #selector(YOUR_METHOD(_:))) 

Swift 3.0

let image = UIImage(named: "myImage")?.withRenderingMode(.alwaysOriginal) 
let button = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(YOUR_METHOD(_:))) 
+0

esto funciona. asegúrese de establecer las propiedades del tamaño del botón ... –

+2

Esto soluciona mi error. ¿Alguien puede explicar por qué esto es necesario? –

+1

Intenté todo y esta fue la única solución que funcionó. – Paul

0

que iba a escribir el mismo código que lo hace. Tenga en cuenta que al agregar una imagen al proyecto, asegúrese de que se agregue al objetivo contra el que está generando.

1

Después de crear el elemento de botón de la barra hacer a continuación:

systemItem1.image = [systemItem1.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
9

En Swift:

Primera solución

let img = UIImage(named: "picture")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) 
let leftBarButtonItem = UIBarButtonItem(image: img, style: UIBarButtonItemStyle.Plain, target: self, action: nil) 
self.navigationItem.leftBarButtonItem = leftBarButtonItem 

Segunda solución

let img = UIImage(named: "picture")! 
let imgWidth = img.size.width 
let imgHeight = img.size.height 
let button = UIButton(frame: CGRect(x: 0, y: 0, width: imgWidth, height: imgHeight)) 
button.setBackgroundImage(img, forState: .Normal) 
button.addTarget(self, action: nil, forControlEvents: UIControlEvents.TouchUpInside) 
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button) 
Cuestiones relacionadas