2011-02-14 17 views
5

Estoy tratando de obtener el nombre de la imagen de fondo de un botón personalizado.cómo obtener el nombre de la imagen de un UIButton en iPhone SDK?

me llama a este método cuando hago clic sobre el UIButton:

-(void)getButtonImageName:(id)sender{  
    UIButton *resultButton = (UIButton *)sender; 
    NSLog(@" The button's image is %@.", resultButton.currentImage); 
} 

puedo conseguir el título y otras propiedades del botón, pero no el nombre de la imagen de fondo.

¿Alguien sabe cómo hacer eso? ¡Gracias!

Respuesta

1

No hay un método para convertir un UIImage en el nombre utilizado con [UIImage imageNamed:].

¿abuse de la imagen para almacenar datos?
¿Qué intentas lograr con el nombre de la imagen?


Editar:

tengo varios botones, quiero obtener el nombre de la imagen cuando se presiona un botón, cambiar a otro controlador de vista y cargar esa imagen con el nombre.

No hace falta hacer esto, solo pase la instancia de UIImage.
Si desea mostrar una imagen diferente basada en el nombre, como si tuviera una miniatura y desea mostrar la versión grande en otro controlador de vista, debe obtener el nombre de la imagen de su modelo de datos y pasarlo al controlador de vista.
¿Cómo se decide qué botón recibe cada imagen?

+0

tengo varios botones, quiero obtener el nombre de la imagen cuando presione un botón, cambie a otro controlador de vista y cargue esa imagen con el nombre. – karse23

0

@fluchtpunkt Como dices, tengo algunas miniaturas que son botones UI con una imagen de fondo. Lo que sucede es que estoy creando lo siguiente para la categoría seleccionada en el controlador de vista anterior. Algo como esto ...

if([strSection isEqualToString:@"animals"]){ 
     [button_thumbnail_1 setBackgroundImage:[UIImage imageNamed:@"image1.png"] forState:(UIControlState)normal]; 
     [button_thumbnail_2 setBackgroundImage:[UIImage imageNamed:@"image2.png"] forState:(UIControlState)normal]; 
    } 
    if([strSection isEqualToString:@"cars"]){ 
     [button_thumbnail_1 setBackgroundImage:[UIImage imageNamed:@"image1.png"] forState:(UIControlState)normal]; 
     [button_thumbnail_2 setBackgroundImage:[UIImage imageNamed:@"image2.png"] forState:(UIControlState)normal]; 
    } 
} 

Gracias por la respuesta

0

Se puede heredar UIButton:

//.h 
@interface MySpecialButton : UIButton { 
    int mySpecialAttribute; 
} 

@property (nonatomic) int mySpecialAttribute; 

- (void) setBackgroundImage; 
- (UIImage*) getImage; 

@end 

y usar su atributo especial para ambos conjuntos y devolver el nombre de la imagen:

//.m 
@implementation LetterButton 

@synthesize mySpecialAttribute; 
- (void) setBackgroundImage { 

    [self setBackgroundImage:[self getImage] forState:UIControlStateNormal]; 
    [self setBackgroundImage:[self getImage] forState:UIControlStateDisabled]; 
} 

- (UIImage*) getImage { 
    NSString *fileName = [NSString stringWithFormat: 
      @"My_special_image_%i.png", mySpecialAttribute]; 

    return [UIImage imageNamed:fileName]; 
} 

@end 

Establezca la clase del botón en el xib:

use of MySpecialButton

10

Este es el método más sencillo para obtener la imagen actual de un botón personalizado

-(void)yesButtonButtonCliked:(id)sender 
{ 
    UIButton *tmpYes = (UIButton *)sender; 
    [self ClearAllButtons:tmpYes.tag:@"YES"]; 
    UIImage* selectedImg=[UIImage imageNamed:@"checkboxtick.png"]; 
    if (tmpYes.currentImage == selectedImg) 
    { 

    } 
    else 
    { 
     [tmpYes setImage:[UIImage imageNamed:@"checkboxtick.png"] forState:UIControlStateNormal]; 
    } 
    NSLog(@"Button tag is %d",tmpYes.tag); 
} 
0

Tras la respuesta de Matthias "No hay necesidad de hacer esto, sólo tiene que pasar la instancia UIImage", que fue el solución para mí, con el código específico para los compañeros newbs:

Calling .m: 
    -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
       //Create an instance of the destination controller 
       dmImageZoom *dmz = (dmImageZoom *)[segue destinationViewController]; 
       //Get the tapped button (the image was in a button) into a button object 
       UIButton *btnImg= sender; 
       //Get the button's image object 
       UIImage *img=btnImg.currentImage; 
       //Pass the image object to the destination controller's instance variable 
       dmz.imgPassed=img; 

Called .h: 
@interface dmImageZoom : UIViewController { 
    //Instance variable 
    UIImage *imgPassed; 
} 
    //Property for the object that presents the image 
    @property (strong, nonatomic) IBOutlet UIImageView *imgView; 
    //Property that enables it to be assigned a value 
    @property (strong, nonatomic) IBOutlet UIImage *imgPassed; 

Called .m: 

- (void)viewDidLoad 
{ 
    ... 
    imgView.contentMode = UIViewContentModeScaleAspectFit; 
    //Assign the image to view object 
    imgView.image=imgPassed; 
0
UIButton *senderButton = (UIButton*)sender;  
if ([senderButton.currentTitle isEqualToString:@"Hello"]) { 
      [senderButton setTitle:@"H" forState:UIControlStateNormal]; 
     } 
     else { 
      [senderButton setTitle:@"Hello" forState:UIControlStateNormal]; 
    forState:UIControlStateNormal]; 
     } 
Cuestiones relacionadas