2011-05-09 13 views

Respuesta

80

Prueba este código:

UIImage* image3 = [UIImage imageNamed:@"mail-48_24.png"]; 
CGRect frameimg = CGRectMake(0, 0, image3.size.width, image3.size.height); 
UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg]; 
[someButton setBackgroundImage:image3 forState:UIControlStateNormal]; 
[someButton addTarget:self action:@selector(sendmail) 
    forControlEvents:UIControlEventTouchUpInside]; 
[someButton setShowsTouchWhenHighlighted:YES]; 

UIBarButtonItem *mailbutton =[[UIBarButtonItem alloc] initWithCustomView:someButton]; 
self.navigationItem.rightBarButtonItem=mailbutton; 
[someButton release]; 
+1

funciona muy bien, pero cuando hago clic en el botón de aplicación es de choque y un simulador de dejar de fumar de repente. –

+0

¿Cómo puedo hacerlo y no perder la acción Segue definida en el botón en el guión gráfico? –

+0

Renato: Déle un nombre al canal y llame '[self performSegueWithIdentifier: @" yourSegueName "sender: self];' en la acción de destino del botón. – lari

0
[doneItem setImage:[UIImage imageNamed:@"yourImage.png"] forState:UIControlStateNormal]; 
+0

genera error en la pieza hecha –

5
UIButton *urButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
urButton.frame = urRequiredFrame; 
[urButton setImage:urImage forState:UIControlStateNormal]; 
[urButton addTarget:self action:@selector(donePressed:) 
    forControlEvents:UIControlEventTouchUpInside]; 

UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithCustomView:urButton]; 
self.navigationItem.rightBarButtonItem=doneButton; 
+1

urRequiredFrame; ???? urImage ??? –

+0

urRequiredFrame es el marco en el que desea que esté el botón y urImage es la imagen que desea como la imagen del botón – visakh7

+0

+1 Me es útil .. – Praveenkumar

7

Por favor, intente este código:

UIButton *btnNext1 =[[UIButton alloc] init]; 
[btnNext1 setBackgroundImage:[UIImage imageNamed:@"btnNext.png"] forState:UIControlStateNormal]; 

btnNext1.frame = CGRectMake(100, 100, 50, 30); 
UIBarButtonItem *btnNext =[[UIBarButtonItem alloc] initWithCustomView:btnNext1]; 
[btnNext1 addTarget:self action:@selector(nextButtonClicked) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.rightBarButtonItem = btnNext; 
51
UIBarButtonItem *_btn=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"XXXXXXX.png"] 
                style:UIBarButtonItemStylePlain 
                target:self 
                action:@selector(yourMethod)]; 

self.navigationItem.rightBarButtonItem=_btn; 
+3

Es difícil de creer que esta respuesta reciba pocos votos – onmyway133

+1

Just need measures Button –

+0

Totalmente de acuerdo con @ onmyway133. Respuesta realmente simple y útil. – lerp90

0

Una forma sencilla:

UIImage* customImg = [UIImage imageNamed:@"custom-img.png"]; 

UIBarButtonItem *_customButton = [[UIBarButtonItem alloc] initWithImage:customImg style:UIBarButtonItemStyleDone target:nil action:nil]; 

self.navigationItem.rightBarButtonItems = [[NSArray alloc] initWithObjects:_customButton, nil]; 

Luego, si necesita más de un botón puede simplemente y otro UIBarButtonItem a .

5

En caso de que alguien necesita código Swift de respuesta aceptada:

let infoImage = UIImage(named: "my-icon-32.png") 
let imgWidth = infoImage?.size.width 
let imgHeight = infoImage?.size.height 
let button:UIButton = UIButton(frame: CGRect(x: 0,y: 0,width: imgWidth!, height: imgHeight!)) 
button.setBackgroundImage(infoImage, forState: .Normal) 
button.addTarget(self, action: Selector("openInfo"), forControlEvents: UIControlEvents.TouchUpInside) 
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button) 

P. S. La respuesta de Gurpreet Singh solo funciona con PNG transparente. También tengo que configurar el botón tintcolor distinto de clearColor.

0

Hacer esto. Es mucho más simple.

  1. Ponga el archivo de imagen en el directorio del proyecto

  2. Añadir el archivo en Xcode (Haga clic derecho sobre el proyecto de Xcode, añadir archivos a "Nombre del proyecto")

  3. Seleccione su UIBarButtonItem Storyboard en

  4. Haga clic en "imagen" y encontrar su imagen (Ver imagen)

  5. Celebre, porque funcionará perfectamente y no requiere código innecesario.

enter image description here

+1

Lo hice y mi imagen muestra un rectángulo azul plano, no la imagen que seleccioné de mi proyecto. ¿Algunas ideas? – ammianus

+2

Para responder a mi propio comentario, no tenía el alfa correctamente configurado en el archivo de imagen .png, tuve que modificarlo con GIMP para establecer el color blanco en alfa. – ammianus

+0

cómo se proporcionan dos imágenes separadas de esta manera para estados seleccionados/no seleccionados – danchik

0

de recoger en el answer by Gurpreet Singh. Para mantener el estado actual de un botón ya existente, reutilice el objetivo y la acción.

SEL selector = self.navigationItem.rightBarButtonItem.action; 
id target = self.navigationItem.rightBarButtonItem.target; 
UIBarButtonItem *_btn=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"icon_close.png"] 
                 style:UIBarButtonItemStylePlain 
                target:target 
                action:selector]; 

self.navigationItem.rightBarButtonItem = _btn; 
3

En Swift

Otra solución utilizando imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) método siguiente:

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

Aquí es lo que funciona para mí. Encontré que 30x30 es un buen tamaño para el botón en la barra de navegación. El UIImage escala al tamaño del botón automáticamente.

UIImage *image = [UIImage imageNamed:@"XXXXXXXXXX"]; 
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; 
[button setBackgroundImage:image forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(someAction) forControlEvents:UIControlEventTouchUpInside]; 
button.adjustsImageWhenHighlighted = NO; 
UIBarButtonItem *rightButton =[[UIBarButtonItem alloc] initWithCustomView:button]; 
self.navigationItem.rightBarButtonItem = rightButton; 
0
let sliderImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 40, height: 30)) 
    sliderImageView.contentMode = .ScaleAspectFit 
    sliderImageView.image = UIImage(named: "sliderMenu") 

    OR 

    var sliderImage = UIImage(named: "sliderMenu") 
    navigationItem.leftBarButtonItem?.image = sliderImage 
Cuestiones relacionadas