2009-09-24 9 views
169

¿Cómo se configura la imagen para un UIButton en el código?Configurar una imagen para un UIButton en el código

tengo esto:

UIButton *btnTwo = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btnTwo.frame = CGRectMake(40, 140, 240, 30); 
[btnTwo setTitle:@"vc2:v1" forState:UIControlStateNormal]; 
[btnTwo addTarget:self action:@selector(goToOne) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:btnTwo]; 

pero no veo lo que va a establecer la imagen para ello.

Respuesta

350

Objective-C

UIImage *btnImage = [UIImage imageNamed:@"image.png"]; 
[btnTwo setImage:btnImage forState:UIControlStateNormal]; 

Swift

let btnImage = UIImage(named: "image") 
btnTwo.setImage(btnImage , forState: UIControlState.Normal) 
+1

Como una nota al margen: esto mostrará la imagen, pero el texto del título del botón estará oculto. – leviathan

+0

Este es el código que está funcionando pero obtengo una imagen con el análisis, así que, ¿cómo puedo hacerlo? este código me funciona en el caso UIImage: - largePick.image = aNewsInfo.smallImageData; ¿Cómo puedo hacer esto con UIButton ... Puede ayudarme ... – user755278

+1

@slcott, donde [la documentación] (http://developer.apple.com/library/ios/#documentation/UIKit/ Reference/UIButton_Class/UIButton/UIButton.html) ¿declarar eso? No veo que sugiera que 'setImage' esté en desuso. (Me parece que estás confundiendo 'UIButton.setImage' con' UITableViewCell.image', que * es * una propiedad obsoleta como dijiste.) –

56

solución de Mike se acaba de mostrar la imagen, pero ningún título establecido en el botón no será visible, ya que se puede o bien establecer el título o la imagen.

Si desea establecer tanto (su imagen y título) utiliza el siguiente código:

btnImage = [UIImage imageNamed:@"image.png"]; 
[btnTwo setBackgroundImage:btnImage forState:UIControlStateNormal]; 
[btnTwo setTitle:@"Title" forState:UIControlStateNormal]; 
+2

¿cuál es la diferencia entre ** setImage ** y ** setBackgroundImage **? – onmyway133

+3

setBackgroundImage estirará la imagen sobre el ancho del botón sobre el texto del título, mientras que setImage hará que el botón sea una imagen que ignora el texto del título sin estirar la imagen. – Ernest

8

Usted puede poner la imagen en cualquiera de la forma:

UIButton *btnTwo = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btnTwo.frame = CGRectMake(40, 140, 240, 30); 
[btnTwo setTitle:@"vc2:v1" forState:UIControlStateNormal]; 
[btnTwo addTarget:self 
      action:@selector(goToOne) 
forControlEvents:UIControlEventTouchUpInside]; 


[btnTwo setImage:[UIImage imageNamed:@"name.png"] forState:UIControlStateNormal]; 

//OR setting as background image 

[btnTwo setBackgroundImage:[UIImage imageNamed:@"name.png"] 
        forState:UIControlStateNormal]; 

[self.view addSubview:btnTwo]; 
+0

Esta parte del código me tiene confundido. btnImage = [UIImage imageNamed:@"image.png"]; ¿Cuál es btnImage? Eso no estaba en el código original. ¿Es ese un nuevo botón? –

+0

puede establecer directamente la imagen del botón en lugar de tomar otro objeto de imagen como este: [btnTwo setImage: [UIImage imageNamed: @ "image.png"]]; –

+0

tiene que tener buttonWithType: UIButtonTypeRoundedRect to UIButtonTypeCustom El otro botón no se mostrará de acuerdo con su imagen. –

21

Antes de que esto funcionaría para mí tuve que cambiar el tamaño del marco del botón explícitamente en función del tamaño del marco de la imagen.

UIImage *listImage = [UIImage imageNamed:@"list_icon.png"]; 
UIButton *listButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

// get the image size and apply it to the button frame 
CGRect listButtonFrame = listButton.frame; 
listButtonFrame.size = listImage.size; 
listButton.frame = listButtonFrame; 

[listButton setImage:listImage forState:UIControlStateNormal]; 
[listButton addTarget:self.navigationController.parentViewController 
       action:@selector(revealToggle:) 
    forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *jobsButton = 
    [[UIBarButtonItem alloc] initWithCustomView:listButton]; 

self.navigationItem.leftBarButtonItem = jobsButton; 
+0

Este truco para cambiar el tamaño de los botones es muy útil. –

+0

@jrasmusson solo quería agregar que las 3 líneas de violín con el marco también se pueden escribir en '[listButton sizeToFit]' – bk138

9

Puede hacerlo de esta manera

[btnTwo setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal]; 
9
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn.frame = CGRectMake(0, 0, 150, 44); 
[btn setBackgroundImage:[UIImage imageNamed:@"buttonimage.png"] 
       forState:UIControlStateNormal]; 
[btn addTarget:self 
    action:@selector(btnSendComment_pressed:) 
    forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:btn]; 
2

que estaba buscando una solución para añadir un UIImage a mi UIButton. El problema fue que muestra la imagen más grande de lo necesario. Sólo me ayudó con esto:

_imageViewBackground = [[UIImageView alloc] initWithFrame:rectImageView]; 
_imageViewBackground.image = [UIImage imageNamed:@"gradientBackgroundPlain"]; 
[self addSubview:_imageViewBackground]; 
[self insertSubview:_imageViewBackground belowSubview:self.label]; 
_imageViewBackground.hidden = YES; 

Cada vez que quiero mostrar mi UIImageView que acaba de establecer la var hidden-YES o NO. Puede haber otras soluciones pero me confundí muchas veces con esto y esto lo resolvió y no tuve que ocuparme de las cosas internas que UIButton está haciendo en el fondo.

8

En caso de Swift usuario

// case of normal image 
let image1 = UIImage(named: "your_image_file_name_without_extension")! 
button1.setImage(image1, forState: UIControlState.Normal) 

// in case you don't want image to change when "clicked", you can leave code below 
// case of when button is clicked 
let image2 = UIImage(named: "image_clicked")! 
button1.setImage(image2, forState: UIControlState.Highlight) 
2

No se preocupe tanto que enmarca el botón de código, se puede hacer eso en el guión gráfico. Esto funcionó para mí, una línea ... más simple.

[self.button setBackgroundImage:[UIImage imageNamed: @"yourPic.png"] forState:UIControlStateNormal]; 
1
-(void)buttonTouched:(id)sender 
{ 
    UIButton *btn = (UIButton *)sender; 

    if([[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"icon-Locked.png"]]) 
    { 
     [btn setImage:[UIImage imageNamed:@"icon-Unlocked.png"] forState:UIControlStateNormal]; 
     // other statements.... 
    } 
    else 
    { 
     [btn setImage:[UIImage imageNamed:@"icon-Locked.png"] forState:UIControlStateNormal]; 
     // other statements.... 
    } 
} 
2

Swift 3 Versión (butt_img debe ser un conjunto de imágenes en Assets.xcassets o Imágenes.xcassets carpeta en Xcode):

btnTwo.setBackgroundImage(UIImage(named: "butt_img"), for: .normal) 
btnTwo.setTitle("My title", for: .normal) 

De todos modos, si desea que la imagen que se va a escala para llenar el tamaño del botón, se puede añadir un UIImageView sobre él y asignarle su imagen:

let img = UIImageView() 
img.frame = btnTwo.frame 
img.contentMode = .scaleAspectFill 
img.clipsToBounds = true 
img.image = UIImage(named: "butt_img") 
btnTwo.addSubview(img) 
Cuestiones relacionadas