iphone uibarbuttonitem

iphone - agregar imagen a UIBarButtonItem usando initWithImage:(UIImage*) imagen



(9)

Aquí hay un ejemplo que crea un botón de 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, configure 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];

Me gustaría saber cómo configurar una imagen en un UIBarButtonItem que luego se agregará a una UIToolbar, utilizando InitWithImage al crear un UIBarButtonItem.

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

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

¡Gracias!


De la documentación de 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 ignorará el color de la imagen y la volverá a colorear 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.


Después de crear el elemento del botón de barra, haga lo siguiente:

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


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)


Escribiría el mismo código que tú. Tenga en cuenta que cuando agrega imágenes al proyecto, asegúrese de que se agreguen al objetivo que está creando.


También estaba teniendo este problema y lo resolví usando un archivo png con un canal alfa. Estaba intentando hacer una maqueta rápida y agregué un botón Atrás con un archivo jpg en un fondo, el 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ó.


UIBarbuttonItem initWithImage no creará un botón de barra con esa Imagen especificada. Crea un patrón de un botón UIBar 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, entonces 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, por eso muestra blanco.


Y para iOS 7+, haz lo siguiente:

C objetivo

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(_:)))


Yo trataría de establecer

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