2012-06-16 4 views
7

Aquí está mi trozo de código que crea botones de programación:Como imagen de fondo individuales conjunto de grupo de UIButtons mediante programación

NSArray *buttonImage=[NSArray arrayWithObjects:[UIImage imageNamed:@"Cover_0.png"], 
         [UIImage imageNamed:@"Cover_1.png"], 
         [UIImage imageNamed:@"Cover_2.png"], 
         [UIImage imageNamed:@"Cover_3.png"], 
         [UIImage imageNamed:@"Cover_4.png"], 
         [UIImage imageNamed:@"Cover_5.png"], 
         [UIImage imageNamed:@"Cover_6.png"], 
         [UIImage imageNamed:@"Cover_7.png"],nil]; 

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
button.frame = CGRectMake(0, 0, 200.0f, 200.0f); 
[button setTitle:[NSString stringWithFormat:@"%i", index] forState:UIControlStateNormal]; 
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
button.titleLabel.font = [button.titleLabel.font fontWithSize:50]; 

[button setImage:buttonImage forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
return button; 

Pero mientras se ejecuta que no puedo conseguir en el simulador y su lanzando una señal Sigabart error. ¿Alguien puede ayudar?

Respuesta

7

para crear botones mediante programación utilizando variedad de selectores puede utilizar este fragmento de código:

// define Estrategia

@interface DataItemStrategy : NSObject 
@property(nonatomic, assign) SEL someSelector; 
@end 

@implementation DataItemStrategy 

@synthesize someSelector = _someSelector; 

-(id)initWithSelector:(SEL)someSelector 
{ 
    self = [super init]; 
    if (self) 
    { 
     self.someSelector = someSelector; 
    } 
    return self; 
} 

@end 


-(void)createButtons 
{ 
    NSArray *buttonImages =[NSArray arrayWithObjects:[UIImage imageNamed:@"Cover_0.png"], 
          [UIImage imageNamed:@"Cover_1.png"], 
          [UIImage imageNamed:@"Cover_2.png"],nil]; 

    NSArray *dataStrategies = [NSArray arrayWithObjects: 
            [[[DataItemStrategy alloc] initWithSelector:@selector(buttonAction0:)] autorelease], 
            [[[DataItemStrategy alloc] initWithSelector:@selector(buttonAction1:)] autorelease], 
            [[[DataItemStrategy alloc] initWithSelector:@selector(buttonAction2:)] autorelease], nil]; 

    CGRect buttonFrame = CGRectMake(0, 0, 50, 50); 
    for (NSInteger i = 0; i < [buttonImages count]; i++) 
    { 
     buttonFrame.origin.y += 50; 
     UIImage *buttonImage = [buttonImages objectAtIndex:i]; 
     DataItemStrategy *dataStrategie = [dataStrategies objectAtIndex:i]; 
     NSString *title = [NSString stringWithFormat:@"%d", i]; 
     UIButton *button = [self buttonWithFrame:buttonFrame image:buttonImage action:dataStrategie.someSelector title:title]; 
     [self.view addSubview:button]; 
    }  
} 

-(UIButton *)buttonWithFrame:(CGRect)buttonFrame image:(UIImage *)buttonImage action:(SEL)buttonAction title:(NSString *)title 
{ 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.frame = buttonFrame; 
    [button setTitle:title forState:UIControlStateNormal]; 
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    button.titleLabel.font = [button.titleLabel.font fontWithSize:50]; 

    [button setImage:buttonImage forState:UIControlStateNormal]; 
    [button addTarget:self action:buttonAction forControlEvents:UIControlEventTouchUpInside]; 
    return button; 
} 
1

Modificar el código de la siguiente manera para configurar primera imagen de botón/puede utilizar para el bucle para crear y configurar imágenes para uibuttons

NSArray *buttonImage=[NSArray arrayWithObjects:[UIImage imageNamed:@"Cover_0.png"], 
        [UIImage imageNamed:@"Cover_1.png"], 
        [UIImage imageNamed:@"Cover_2.png"], 
        [UIImage imageNamed:@"Cover_3.png"], 
        [UIImage imageNamed:@"Cover_4.png"], 
        [UIImage imageNamed:@"Cover_5.png"], 
        [UIImage imageNamed:@"Cover_6.png"], 
        [UIImage imageNamed:@"Cover_7.png"],nil]; 

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
button.frame = CGRectMake(0, 0, 200.0f, 200.0f); 
[button setTitle:[NSString stringWithFormat:@"%i", index] forState:UIControlStateNormal]; 
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
button.titleLabel.font = [button.titleLabel.font fontWithSize:50]; 

[button setImage:(UIImage*)[buttonImage objectAtIndex:1] forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
return button; 

línea de cambio

[button setImage:(UIImage*)[buttonImage objectAtIndex:1] forState:UIControlStateNormal]; 

Esto establecerá imagen para el botón . Se ha enviado una matriz para establecer la imagen lo que la aplicación se bloqueará

+0

: TKS ... pero si fijo como objectAtIndex como 1 solamente Cover_1.png se establece en todas las imágenes pero necesito cada uno, pero tiene imágenes de fondo individuales ... U puede ayudar ... – Dany

+0

Es necesario utilizar [ButtonImage objectAtIndex: 0]? a establecer una imagen de botón Por segundo Uso del botón [buttonImage objectAtIndex: 1] Tercero [buttonImage objectAtIndex: 2]; Cuarto [buttonImage objectAtIndex: 3]; De manera parecida usted tiene que fijar – Sumanth

+0

: Tks hombre ... Tengo mi producción determinando objectAtIndex como el índice ... Pero i trató de disparar la acción diversa para cada botón seleccionándolo ... Aquí está mi código para el primer botón – Dany

2

No se puede establecer una serie de imágenes a la propiedad de imagen UIButton. Si mira la documentación de UIButton, verá que espera un UIImage.

1

Probar: [botón setImage: [ButtonImage objectAtIndex: Índice] forState: UIControlStateNormal];

+0

:? muchas gracias hombre ... funciona .. – Dany

2

¿Cuál es el índice en el código ?? Este set:

[button setBackgroundImage:[buttonImage objectAtIndex:index] forState:UIControlStateNormal]; 
Cuestiones relacionadas