Search code examples
iosiphoneuibuttonprogrammatically-created

How to Set individual background image for group of UIButtons by programmatically


Here is my piece of code that creates buttons programmatically:

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;

But while running it I can't get in simulator and its throwing a Signal Sigabart error. Can anyone help?


Solution

  • To create buttons programmatically using array of selectors you can use this snippet of code:

    //define Strategy

    @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;
    }