Проблема в событии с несколькими кнопками при нажатии на iPhone - PullRequest
0 голосов
/ 23 октября 2009

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

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 ]

2 голосов
/ 23 октября 2009

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

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 голосов
/ 23 октября 2009

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

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

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