Establecer una imagen para un UIButton en el código

¿Cómo se establece la 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 qué configurará la imagen para ello.

C objective

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

Swift 4

 let btnImage = UIImage(named: "image") btnTwo.setImage(btnImage , for: UIControlState.normal) 

La solución de Mike solo mostrará la imagen, pero cualquier título establecido en el botón no estará visible, ya que puede establecer el título o la imagen.

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

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

Antes de que esto funcionara, tuve que cambiar el tamaño del marco del botón de forma explícita 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; 

Puedes hacerlo así

 [btnTwo setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal]; 
 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]; 

En caso de usuario Swift

 // 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) 

Puedes poner la imagen en cualquiera de los dos sentidos:

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

Estaba buscando una solución para agregar un UIImage a mi UIButton . El problema fue que muestra la imagen más grande de lo necesario. Solo 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 , simplemente configuro el var hidden a YES o NO . Puede haber otras soluciones pero me confundí muchas veces con esto y esto lo resolvió y no tuve que lidiar con las cosas internas que UIButton está haciendo en segundo plano.

No se preocupe tanto por enmarcar el botón del código, puede hacerlo 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]; 

La versión de Swift 3 (butt_img debe ser un conjunto de imágenes en la carpeta Assets.xcassets o Images.xcassets en Xcode):

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

De todos modos, si desea que la imagen se amplíe para que ocupe el tamaño del botón, puede agregar 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) 
 -(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.... } }