Добавление действий к кнопке программно на iOS - PullRequest
5 голосов
/ 28 апреля 2011

Я пытаюсь добавить действие к кнопкам, которые создаю программно:

        [btn    addTarget:self
            action:@selector(indexAction)
     forControlEvents:UIControlEventTouchUpInside];

Это отлично работает. Однако теперь я хочу передать переменную (int k) в метод indexAction. Я не мог заставить это работать:

        [btn    addTarget:self
            action:@selector([self indexAction:k])
     forControlEvents:UIControlEventTouchUpInside];

Я уверен, что делаю что-то не так. Это контекст приведенного выше кода:

  -(void) initIndexButtons {

    float buttonPadding = -8;
    float buttonWidth = 23;
    float buttonHeight = 80;
    CGRect frame = CGRectMake(0,0,0,0);
    for (int k=0;k<5;k++)
    {
        UIButton* btn = [[UIButton alloc] initWithFrame:frame];;        btn.tag = k;
        btn.frame = CGRectMake(0, k*(buttonPadding+buttonHeight), buttonWidth, buttonHeight);

        UIImage *newImage = [UIImage imageNamed:@"index.png"];
        [btn setBackgroundImage:newImage forState:UIControlStateNormal];

        [btn    addTarget:self
                action:@selector(self indexAction:k)
         forControlEvents:UIControlEventTouchUpInside];
    }
}

-(void)indexAction:(int *)buttonTag
{
    NSLog(@"buttonTag: %i", buttonTag);
}

EDIT:

Я изменил свой код на:

// ...
[btn    addTarget:self
                action:@selector(indexAction:)
         forControlEvents:UIControlEventTouchUpInside];

        //[self indexAction:k];

        [indexView addSubview:btn];
        [indexView sendSubviewToBack:btn];
    }
}

-(void)indexAction:(id)sender
{
    NSInteger *tid = ((UIControl *) sender).tag;
    NSLog(@"buttonTag: %i", tid);
}

Но теперь я получаю предупреждение, что «Инициализация делает указатель из целого числа без приведения к строке NSInteger *tid = ((UIControl *) sender).tag;


EDIT:

Это правильная строка кода:

NSInteger tid = ((UIControl*)sender).tag;

Ответы [ 3 ]

3 голосов
/ 28 апреля 2011

Обычно метод, который вызывает кнопка, принимает один параметр:

(id)sender

Взгляните на вопрос - как передать переменную в действие UIButton

2 голосов
/ 28 апреля 2011

tag является NSInteger не NSInteger*

изменить на

NSInteger tid = ((UIControl*)sender).tag;
1 голос
/ 28 апреля 2011

Способ сделать это - установить:

-(void)indexAction:(id)sender
{
NSLog(@"Tag=%@"[(UIButton*)sender tag]);
}

и вызов:

    [btn    addTarget:self
            action:@selector(self indexAction:)
     forControlEvents:UIControlEventTouchUpInside];
}

, не совсем уверенный в моем кастинге, не проверял, но я думаюон должен работать!Желаем удачи.

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