2012-03-15 6 views
0

У меня есть метод:вызова селектора с аргументами

-(void)pickTheQuiz:(id)sender etat:(int)etatQuiz{ 
    //i need to get the etatQuiz value here  


} 

и где-то в моем коде, я называю описанную выше способом, как это:

int etat_quiz=4; 
[button addTarget:self action:@selector(pickTheQuiz:etat:)withObject:etat_quiz forControlEvents:UIControlEventTouchUpInside]; 

При этом, я получил сообщение об ошибке:

Receiver type UIButton for instance message does not declare a method with selector 'addTarget:action:withObject:forControlEvent 

EDIT:

-(void)pickTheQuiz:(id)sender etat:(int)etatQuiz{ 


    NSLog(@"The part number is:%i",((UIControl*)sender).tag); 

} 

ответ

3

Вы не можете передать такой аргумент. Вместо этого вы можете установить «etatQuiz» как тег yo ur. И можете получить доступ к нему в вашем селекторе. например:

button.tag = etatQuiz; 
[button addTarget:self action:@selector(pickTheQuiz:) forControlEvents:UIControlEventTouchUpInside]; 


-(void)pickTheQuiz:(UIButton *)sender { 
    int value = sender.tag; 


} 
+0

, и если я хочу передать более одной информации? например, 2 тега. thnx заранее. – Luca

+0

См. Http://stackoverflow.com/questions/3716633/passing-parameters-on-button-actionselector эту ссылку – Sree

0

Простым решением является добавление целочисленной переменной в качестве свойства кнопки tag. Затем вы можете получить его, используя ((UIButton *) sender).tag;

button.tag = 4; 
[button addTarget:self action:@selector(pickTheQuiz:) forControlEvents:UIControlEventTouchUpInside]; 

Тогда в pickTheQuiz: методе:

int etatQuiz = ((UIButton *) sender).tag; 
2

Вы используете addTarget неправильно, то вы должны сделать:

addTarget:self action:@selector(pickTheQuiz:) forControlEvents:(UIControlEventTouchUpInside) 

И добавить переменную, например, в теге кнопки

+0

Я ожидал ':' при компиляции с использованием вашего решения, почему используются '::'? – Luca