7

我有一个函数(例如function1),其中有一个按钮和一个名为 auxiliarStruct 的对象,我有那一行:

[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];

但它不起作用有人可以帮助我吗?谢谢。

ps:对不起我的英语,我知道这很糟糕

4

3 回答 3

23

您只能将(UIButton*)对象作为参数传递给addTarget @selector方法。您可以设置 UIButton 标记并将其用于被调用的函数。您可能想找出发送字符串值的任何替代方法。

使用以下代码传递带有按钮的标签:

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

按钮操作应如下所示:

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

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

}
于 2012-06-06T08:11:14.167 回答
3

不知道能不能给按钮的action加参数,我没遇到过这样的方法。

我们所做的最接近的事情是为按钮选择不同的标签,并根据标签区分操作。

无论如何,这不完全是您问题的答案,但我建议作为替代使用类属性而不是发送参数。例如:

  • 您单击按钮,并且要将值“test”发送到您的选择器。而不是发送“测试”,而是将该类属性设置为“测试”,然后在选择器中从那里读取它。我不知道它是否 100% 满足您的需求,但我认为这是一种选择。

你提出了一个有趣的问题。我会尝试调查它以防我有时也需要它,如果我发现任何东西,我会更新我的答案

[编辑] 显然你不是唯一一个问这个问题的人:如何将参数传递给这个函数?在这种情况下,也没有标准解决方案,并且使用了标签。

于 2012-06-06T08:48:55.323 回答
1

该事件将按钮作为参数发送,因此:

   -(void)userSelected:(id)sender {

           UIButton *button = sender;
           ...
    }
于 2012-06-06T08:14:33.353 回答