Передать различные параметры в IBAction

Я предпочитаю использовать функции стрелок во все времена, когда не требуется доступ к локальному this, потому что функция стрелки не связывает свои собственные, аргументы, супер или new.target .

13
задан Josh Caswell 28 July 2016 в 03:41
поделиться

5 ответов

Так называемые «Ibactions» должны иметь одну из этих подписей:

-(void)action;
-(void)actionWithSender:(id)sender;
-(void)actionWithSender:(id)sender event:(UIEvent*)event;

Вы не можете добавлять какие-либо другие параметры. Тем не менее, вы можете использовать отправителя (который является Button1 или Button2 в вашем случае) для получения параметра:

-(void)actionWithSender:(UIButton*)sender {
   NSString* parameter;
   if (sender.tag == 1)   // button1
     parameter = @"foo";
   else                   // button2
     parameter = @"bar";
   ...
}
28
ответ дан 1 December 2019 в 20:00
поделиться

Вы не можете пропускать параметры через Ibaction. Что я обычно делаю, это дать кнопки уникальный тег в IB. Тег - это целочисленное значение, поэтому я вы используете простую таблицу поиска для преобразования тега на некоторое значение.

В этом случае три кнопки, но теги 1 до 3:

- (IBAction) buttonPressed: (UIButton*) sender
{
    static const NSString* names = { @"Foo", @"Bar", @"Baz" };
    id tag = [sender tag];
    if (tag >= 1 && tag <= 3) {
        NSLog(@"Button pressed is %@", names[tag]);
    }
}
1
ответ дан 1 December 2019 в 20:00
поделиться

Дайте различные UBUTTON экземпляров различных TAG Значения свойств.

В вашем методе метод -Mymethod: , вы можете сделать что-то вроде:

- (void) myMethod:(id)sender {
    switch (sender.tag) {
        case (firstButtonTag):
           doFooStuff;
           break;
        case (secondButtonTag):
           doBarStuff;
           break;
        // etc.
    }
}

значения INFERBUTTONTAG и WITHBUTTONTAG Может храниться в enum , если вы хотите сделать это легко для обслуживания.

1
ответ дан 1 December 2019 в 20:00
поделиться

Как упомянул другие, вы не можете пройти свой пользовательский параметр в метод действий. Если вам не нравится решение, используя теги, вы также можете подклассьте Uibutton с вашим пользовательским классом и добавить там свой параметр. (Потому что я бы не буду беспокоиться и просто использовать теги)

0
ответ дан 1 December 2019 в 20:00
поделиться

Вы не. Единственным параметром является объект отправителя, который вы можете использовать, чтобы иметь другое поведение, но то, что я бы сделал, это определить 2 метода действия, которые просто в свою очередь вызовут один и тот же метод с другим параметром, то есть у вас есть:

- (IBAction)button1:(id)sender
{
    [self doStuff:kButton1];
}

- (IBAction)button2:(id)sender
{
    [self doStuff:kButton2];
}

- (void)doStuff:(ParamType)param;
{
    ...
}

В защиту этого метода (без каламбула), я бы добавил, что он делает более понятнее, когда вы просматриваете свой интерфейс с помощью интерфейса, чтобы увидеть, что разные кнопки на самом деле имеют разные эффекты, которые труднее сказать, если они все звонят как что

-1
ответ дан 1 December 2019 в 20:00
поделиться