2012-06-16 3 views
7

Hier ist mein Stück Code, das Tasten programmatisch erstellt:So stellen Sie individuelle Hintergrundbild für die Gruppe von UIButtons durch programmatisch

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; 

Aber während es laufen kann ich nicht in Simulator bekommen und es ist ein Signal Sigabart werfen Error. Kann jemand helfen?

Antwort

7

So erstellen Tasten programmatisch Array von Selektoren Sie den Code-Snippet verwenden können:

// definieren Strategie

@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

Ändern Sie den Code wie unten erste Bild-Taste zur Einstellung/können Sie for-Schleife verwenden, um zu erstellen und Bilder zu 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; 

Änderungslinie

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

Dieses Bild Taste eingestellt wird . Sie haben ein Array gesendet, um das Image zu setzen, so dass die Anwendung abstürzt.

+0

: tks ... aber wenn ich gesetzt als ObjectAtIndex als nur 1 Cover_1.png ist auf alle Bilder eingestellt, aber ich brauche jedes, aber hat individuelle Hintergrundbilder ... Kannst du helfen? ... – Dany

+0

Du musst [buttonImage objectAtIndex: 0] verwenden, um das Bild auf die Schaltfläche zu setzen Schaltfläche verwenden [buttonImage objectAtIndex: 1] Drittens [buttonImage objectAtIndex: 2]; Vierte [buttonImage objectAtIndex: 3]; Similey Sie müssen – Sumanth

+0

: Tks man ... Ich habe meine Ausgabe durch die Definition von objectAtIndex als Index ... Aber ich habe versucht, diffrent Aktion für jede Schaltfläche, indem Sie es ... Hier ist mein Code für die erste Schaltfläche – Dany

2

Sie können ein Array von Bildern nicht auf die UIButton Image-Eigenschaft festlegen. Wenn Sie sich die Dokumentation von UIButton ansehen, sehen Sie, dass es eine UIImage erwartet.

1

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

+0

: Vielen Dank Mann ... es funktioniert .. – Dany

2

Was ist der Index in Ihrem Code? Set Dieser:

[button setBackgroundImage:[buttonImage objectAtIndex:index] forState:UIControlStateNormal]; 
Verwandte Themen