2009-10-23 2 views
0

Я создал пять кнопок в цикле for динамически. Теперь я хочу связать событие OnClick с каждой кнопкой, которая выполняет разные действия. Как я могу это сделать и как определить, какая кнопка нажата?Проблема в нескольких кнопках onclick события в iPhone

for (NSUInteger i=0;i<5;i++) 
{ 
    UIButton *myButton1 = [[UIButton buttonWithType:UIButtonTypeCustom] 
     initWithFrame:CGRectMake(5, 57,15, 15)]; 
    [myButton1 setTitle:@"Click Me!" forState:UIControlStateNormal]; 
    [myButton1 addTarget:self action:@selector(buttonClicked1:) 
     forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:myButton1]; 
} 

ответ

2

Вы можете asseble имя селектора в строку и превратить строку в селекторе:

for (int i=0; i<5; i++) 
{ 
    NSString *actionName = [NSString stringWithFormat:@"buttonClicked%i", i]; 
    SEL action = NSSelectorFromString(actionName); 
    // … 
} 

Но, как кнопки, вероятно, сделать что-то подобное, было бы лучше, если бы все они называли Тот же метод, в котором вы бы просто сказать кнопки друг от друга по tag:

for (int i=0; i<5; i++) 
{ 
    // … 
    [button setTag:i]; 
    [button addTarget:self action:@selector(buttonClicked:) 
     forControlEvents:UIControlEventTouchUpInside]; 
} 

- (void) buttonClicked: (id) button 
{ 
    const int tag = [button tag]; 
    switch (tag) { /* … */ } 
} 

Кстати, почему так много людей настаивают на написании NSInteger, когда вы можете просто ввести int? Есть ли разница? Нет, что я знаю.

+0

FWIW: «При создании 32-разрядных приложений NSInteger представляет собой 32-разрядное целое число. 64-разрядное приложение рассматривает NSInteger как 64-битное целое число». http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html#//apple_ref/doc/uid/20000018-DontLinkElementID_8 –

+0

A-ha, есть даже a SO-поток о них: http://stackoverflow.com/questions/13725. – zoul

0

Почему вы создаете 5 кнопок в цикле for? Есть ли какая-то особая причина, почему вы не используете Interface Builder?

Кроме того, код, который вы отправили, будет размещать каждую кнопку в том же положении. Кнопка будет на верхней части предыдущей кнопки и так далее.

Смежные вопросы