2016-05-13 8 views
0

Ich habe ein Array namens buttons, das aus UIButton-Objekten besteht. Ich befülle es wie folgt:Aufrufmethoden für UIButton-Objekte in NSMutableArray Objective-C

for (int i=0; i<self.numButtons; i++) { 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; 
    [button setTitle:@"Title" forState:UIControlStateNormal]; 
    button.frame = CGRectMake(xCoord-40, y, 80, 20); 
    [button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; 
    [button setTag:i]; 
    [self.buttons addObject:button]; 
    [self.view addSubview:button]; 
    y+= 45; 
} 

Die Aktion für diese Schaltflächen ist buttonAction. Diese Aktion soll die Farbe der ausgewählten Schaltfläche ändern. Hier ist, wie ich es implementiert habe:

-(void) buttonAction:(id)sender{ 
    int num = (int)[sender tag]; 
    [[self.buttons objectAtIndex:num] setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
    NSLog(@"%@", [self.buttons objectAtIndex:buttonClicked].titleLabel.text); 
} 

Das Ergebnis ist, dass es keine Farbänderung gibt. Auch wenn ich versuche, den Titel der Schaltfläche zu NSLog, gibt es (null) zurück. Also meine Frage ist, wie kann ich das beheben, sondern auch, wie ich Methoden auf Objekte innerhalb von Arrays aufrufen? Jede Hilfe wäre willkommen. Vielen Dank!

+0

'self.buttons' ist wahrscheinlich' nil'. – rmaddy

Antwort

4

Alle Beweise deuten auf self.buttons als nil hin. Hast du es jemals initialisiert?

Irgendwo müssen Sie eine Zeile wie:

self.buttons = [NSMutableArray array]; 

Natürlich können Sie den sender Parameter auf Ihre buttonAction: Methode verwenden:

- (void)buttonAction:(UIButton *)button { 
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
} 

Beachten Sie die Änderung des Parameters.

+0

Danke! Ich kann nicht glauben, dass ich vergessen habe, es zu initialisieren – John55

+0

Sie wären nicht die erste Person, die diesen Fehler macht. Wenn Sie jedoch nicht anderweitig auf die Schaltflächen zugreifen müssen, ist das Array nicht erforderlich. – rmaddy

+0

@rmaddy ist richtig. Die UIView behält eine Sammlung aller UI-Elemente bei, die als Unteransichten hinzugefügt wurden. Um alle Elemente in Ihrer Ansicht zu erhalten, rufen Sie einfach self.viewnviews aus Ihrem View-Controller auf. –

0

Ich mag es, dies zu tun. Vergessen Sie nicht, IBAction zu verwenden. Es hilft Ihnen, wenn Sie sich entscheiden, eine Feder oder ein Storyboard zu verwenden.

-(IBAction) buttonAction:(id)sender{ 
    [((UIButton*)sender) setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal] 
    NSLog(@"%@", ((UIButton*)sender).titleLabel.text) 
} 
Verwandte Themen