Цель C: использование тегов - PullRequest
0 голосов
/ 27 декабря 2010

Я исследовал последние несколько дней и не могу понять это. У меня много кнопок, которые делают то же самое (исчезают при нажатии). Я определяю каждый со своим собственным тегом, но как определить, какой из них нажат?

-(IBAction) tapBrick{
int x = brick.tag;
NSLog(@"%d", x);


//remove last brick
[brick removeFromSuperview];

//add to score
count++;
NSString *scoreString = [NSString stringWithFormat:@"%d", count];
score.text = scoreString;

//determine x y coordinates
int xPos, yPos;
xPos = arc4random() % 250;
yPos = arc4random() % 370;
}


-(void) produceBricks {
//determine x y coordinates
int xPos, yPos;
xPos = arc4random() % 250;
yPos = arc4random() % 370;

//create brick
brick = [[UIButton alloc] initWithFrame:CGRectMake(xPos,yPos + 60,70,30)];  
[brick setBackgroundColor:[UIColor blackColor]];
[brick setTag:i];
[brick addTarget:self action:@selector(tapBrick) forControlEvents:UIControlEventTouchUpInside];
i++;
[self.view addSubview:brick];


}

Производить кирпичи вызывается каждые 2 секунды таймером.

1 Ответ

4 голосов
/ 27 декабря 2010

Крис, если все, что вам нужно сделать, это определить нажатую кнопку, просто измените объявление метода, чтобы принять параметр sender, и вызывающая сторона (в данном случае UIButton) предоставит ссылку на сам. Создайте указатель UIButton, и вы сможете получить доступ к тегу нажатой кнопки.

-(void) tapBrick:(id)sender {
    //this is the button that called your method.
    UIButton *theButton = (UIButton *)sender;

    int tag = theButton.tag;
    NSLog(@"%d", tag);

    [theButton removeFromSuperview];

    //rest of code  
}

(Кстати, поскольку вы создаете кнопки с кодом, вам не нужно объявлять возвращаемое значение IBAction. IBAction совпадает с void, за исключением того, что оно дает подсказку по интерфейсу Builder, что вы будете подключать некоторые IBOutlet к этому конкретному методу.)

...