2012-06-06 6 views
6

У меня есть функция (например FUNCTION1), где у меня есть кнопка и объект под названием auxiliarStruct, и у меня есть эта строка:как реализовать addTarget недвижимость в UIButton

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

Но в @selector (userSelected) Мне нужно передать в качестве параметров объект, необходимый в этой функции, но я не знаю, как его реализовать. я объявил, что объект здесь:

//UsersController.h 
#import <UIKit/UIKit.h> 

@interface UsersController : NSObject{ 
    NSInteger *prof_id; 
    NSString *createTime; 
    NSString *fullName; 
    NSString *thumb; 
} 

@property (nonatomic) NSInteger *prof_id; 
@property (nonatomic, retain) IBOutlet NSString *createTime; 
@property (nonatomic, retain) IBOutlet NSString *fullName; 
@property (nonatomic, retain) IBOutlet NSString *thumb; 

@end 

Я вызываемая функция объявлена ​​следующим образом:

-(void)userSelected:(id)sender{ 
    //CODE 
} 

У меня есть объект этого класса, называемый auxiliarStruct, и это то, что мне нужно. Я попытался с

[btn addTarget:self action:@selector(**userSelected:auxiliarStruct**)forControlEvents:UIControlEventTouchUpInside]; 

но это не работает Может кто-нибудь мне помочь? Благодарю.

пс: простите за мой английский, я знаю, что это плохо

+1

какой параметр? Можете ли вы привести пример? – Pfitz

+0

объект собственного класса с 4 nsstrings внутри: UsersController: NSObject { NSInteger * prof_id; NSString * createTime; NSString * fullName; NSString * thumb; } –

+0

Pfitz, я редактировал вопрос. Надеюсь, вы сейчас это понимаете –

ответ

18

Вы можете только Проходят (UIButton*) объект в качестве параметра с addTarget @selector методом. Вы можете установить тег UIButton и использовать его для вызываемой функции. Вы можете найти какие-либо альтернативы для отправки строковых значений.

Используйте следующий код для прохождения метки с помощью кнопки:

 btn_.tag = 10; 
    [btn_ addTarget:self action:@selector(functionName:) forControlEvents:UIControlEventTouchUpInside]; 

Действие кнопки должно выглядеть следующим образом:

- (void) functionName:(UIButton *) sender { 

    NSLog(@"Tag : %d", sender.tag); 

} 
+0

, она не работает, withObject не поддерживается в addTarget –

+0

@nanoDev Ok. Я проверю – Vaquita

+0

Хорошо, спасибо Neptune –

1

Событие отправит кнопку в качестве параметра, так:

-(void)userSelected:(id)sender { 

      UIButton *button = sender; 
      ... 
    } 
3

Я не знаю, можете ли вы добавить параметры к действию кнопки, я никогда не сталкивался с таким методом обмундирование оливково-серого цвета

Самое близкое, что мы сделали, это выбрать разные теги для кнопок и разделить действия в соответствии с тегами.

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

  • вы нажимаете на кнопку, и вы хотите отправить значение «тест» на ваш селектор. Вместо отправки «теста» вы устанавливаете для этого свойства класса «тест», а в своем селекторе вы читаете его оттуда. Я не знаю, соответствует ли это вашим потребностям 100%, но я считаю, что это вариант.

Вы поднимаете интересный вопрос, хотя. Я попытаюсь изучить это на случай, если мне это понадобится и иногда, и если я что-нибудь найду, я обновлю свой ответ

Возможно, вы не единственный, задающий этот вопрос: How can I pass a parameter to this function? В этом В случае не было также стандартного решения, и использовался тег.

Смежные вопросы