Reputation: 2243
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?
Upvotes: 6
Views: 1308
Reputation: 4207
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;
}
Upvotes: 7
Reputation: 11710
You can't set an array of images to the UIButton
image property. If you look at the documentation of UIButton you see that it expects a UIImage
.
Upvotes: 2
Reputation: 2357
What is the index in your code?? Set This:
[button setBackgroundImage:[buttonImage objectAtIndex:index] forState:UIControlStateNormal];
Upvotes: 2
Reputation: 683
Try : [button setImage:[buttonImage objectAtIndex:index] forState:UIControlStateNormal];
Upvotes: 1
Reputation: 4921
Modify the code as below to set first image to button/ you can use for loop to create and set images to 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 image to button. You have sent an array to set image so application will crash
Upvotes: 1