在NSMutableArray Objective-C中调用UIButton对象上的方法

时间:2016-05-13 02:18:28

标签: ios objective-c uibutton nsmutablearray

我有一个名为buttons的数组,它由UIButton对象组成。我填写如下:

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

这些按钮的操作是buttonAction。此操作应该更改所选按钮的颜色。以下是我实施的方法:

-(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);
}

结果是没有颜色变化。即使我尝试NSLog按钮的标题它返回(null)。所以我的问题是如何解决这个问题,以及如何在数组内的对象上调用方法?任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:4)

所有证据都指向self.buttonsnil。你有没有初始化它?

某处你需要一条像:

self.buttons = [NSMutableArray array];

当然,您可以将sender参数用于buttonAction:方法:

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

注意参数的变化。

答案 1 :(得分:0)

我喜欢这样做。不要忘记使用IBAction。如果您决定使用笔尖或故事板,这将有所帮助。

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