How to set up an individual background image for the UIButtons group programmatically

Here is my piece of code that programmatically creates buttons:

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 during work, I can’t get into the simulator and throw a Signal Sigabart error. Can anyone help?

+7
source share
5 answers

To create buttons programmatically using an array of selectors, you can use this piece of code:

// define a 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; } 
+7
source

You cannot set an array of images to the UIButton image UIButton . If you look at the UIButton documentation, you will see that it expects UIImage .

+2
source

What is an index in your code? Install this:

 [button setBackgroundImage:[buttonImage objectAtIndex:index] forState:UIControlStateNormal]; 
+2
source

Change the code as shown below to set the first image to the / button you can use for a loop to create and set images in 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; 

change line

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

This will set the image to the button. You sent an array to set the image for the application to work

+1
source

Try: [button setImage: [buttonImage objectAtIndex: index] forState: UIControlStateNormal];

+1
source

All Articles