IBAction используется с динамически добавленными кнопками UI - PullRequest
1 голос
/ 18 февраля 2011

Добрый вечер всем!

У меня динамически добавляются некоторые UIB-кнопки в мое представление и, конечно, у меня есть IBAction, который обрабатывает события кнопок.

Проблема в следующем: как определить, какая кнопка нажата, если я знаю только отправителя (id) и массив кнопок?

Кнопки никогда не бывают одинаковыми, каждая кнопка имеет свое поведение.Когда я хочу использовать статические кнопки и подключить их через IB, я использую что-то вроде этого:

-(IBAction)doSomething:(id)sender
{
    if(sender == button1)
        dosomething;
    if(sender == button2)
        dosomething else;
    if(sender == button3)
        dosomething3;
}

В моем случае это не работает, потому что нету button1, button2, button3, но есть MutableArray из кнопок, которыеимеют то же имя, что и им.Кнопка!

Я пытался использовать способ, описанный выше, но безуспешно, и я также пытался получить тег кнопки, но мне не с чем сравнить!

Буду очень признателен за вашу помощь.

искренне
L_Sonic PS Динамически означает, что я создаю кнопки в произвольное время во время выполнения, как это

-(void)configActionSheetView
{
    buttonView = [[UIView alloc]initWithFrame:CGRectMake(0.0,460, 60, 480)];
    [buttonView setBackgroundColor:[UIColor blackColor]];
    [buttonView setAlpha:0.6];
    for (int i = 0 ;i<[buffButtons count];i++)
    {
        UIButton *customButton = [buffButtons objectAtIndex:i];
        customButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        //UILabel   *customLabel = [[UILabel alloc]init];
        //[customButton setTag:(i)+11];
        [customButton addTarget:self action:@selector(activateBuffEffect:) forControlEvents:UIControlEventTouchUpInside];
        [customButton setAlpha:1.0];
        customButton.frame = CGRectMake(8.0, 5+(50*i), 44.0, 44.0);
        [customButton setTitle:nil forState:UIControlStateNormal];
        buttonView.frame = CGRectMake(0, 460, 60, 50+(44*(i+1)));
        [buttonView addSubview:customButton];
    }
}

это внутри функций и вызывается во время выполнения.buffButtons - это mutableArray с кнопками, которые заполняются во время выполнения.мне нужно решение, подобное этому, я не могу получить другой метод обработки событий для каждой кнопки.

Ответы [ 3 ]

2 голосов
/ 18 февраля 2011

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

UIButton *myCreatedButton = [[UIButton alloc] init];
[myCreatedButton addTarget:self 
                    action:@selector(doSomething:) 
          forControlEvents:UIControlEventTouchUpInside];

UIButton *myOtherCreatedButton = [[UIButton alloc] init];
[myOtherCreatedButton addTarget:self 
                         action:@selector(doSomethingElse:) 
               forControlEvents:UIControlEventTouchUpInside];

В приведенном выше коде целью (установленным на себя) являетсякласс, в котором найден метод, который вы хотите запустить, действие - это метод, который вы хотите запустить, и controlEvent - это то, что должно вызвать запуск метода.

Если вы сделали это так, вы бы разбили кодв различных методах, подобных этим (вам не нужно указывать их в заголовке):

-(void)doSomething:(id)sender {
    // do somthing here ...
}

-(void)doSomethingElse:(id)sender {
    // do somthing else here ...
}

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

0 голосов
/ 30 марта 2011

Почему бы не добавить тег в кнопку, а затем получить номер тега от (id) отправителя в функции выбора?

0 голосов
/ 18 февраля 2011

Нашли это!

-(IBAction)buttonTapped:(id)sender {
    UIButton *btn = (UIButton *)sender;
    NSLog(@"tapped: %@", btn.titleLabel.text);
    [self anotherIBAction:sender];
}

теперь я могу получить тег от btn: D thnk you!

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