我的代码:
UIButton *boutonSuppr = [UIButton buttonWithType:UIButtonTypeRoundedRect];
boutonSuppr.frame = rectBoutonSuppr;
[boutonSuppr setBackgroundImage: [UIImage imageNamed:@"croixTest.png"] forState:UIControlStateNormal];
[monScrollView addSubview: boutonSuppr];
int numb = 10;
[boutonSuppr addTarget:self action:@selector(boutonSupprAppuye) forControlEvents:UIControlEventTouchUpInside];
我的方法声明:- (void)boutonSupprAppuye:(int) numero;
我的问题是我需要在方法中发送一个参数,因为我有几个UIButton。例如,我想发送"(int)numb"但是当我这样做时:
[boutonSuppr addTarget:self action:@selector(boutonSupprAppuye:numero) forControlEvents:UIControlEventTouchUpInside];
它没有用。
提前谢谢。
答案 0 :(得分:1)
如果您真的只是使用int来识别被击中的按钮,您应该只在Interface Builder中为按钮设置唯一标签,或者在代码中创建它们时,设置相应的枚举然后在您的命中方法中,像这样处理。标签已经在每个UIView中可用,并且专门为此目的而设计。
typedef NS_ENUM(NSInteger, ButtonTag) {
e_buttonTag_unknown = 0,
e_buttonTag_doThing1Button, /* 1 */
e_buttonTag_doThing2Button /* 2 */
};
...
// Add this to the button creation code you posted
boutonSuppr.tag = e_buttonTag_doThing1Button;
// and set the button's action to @selector(buttonTapped:).
...
- (IBAction) buttonTapped: (id) sender
{
UIButton *whichButton = (UIButton *) sender;
ButtonTag whichTag = whichButton.tag;
switch (whichTag)
{
case e_buttonTag_doThing1Button:
// "Do thing 1" button was pressed.
break;
case e_buttonTag_doThing2Button:
// "Do thing 2" button was pressed.
break;
default:
// Some other button was pressed.
break;
}
}
答案 1 :(得分:0)
声明@selector()
时,可以认为它与函数指针相同。它当时没有参数;它在调用选择器时需要参数。
当收到UIButton
事件时,UIControlEventTouchUpInside
类将调用此特定选择器。这意味着执行将远离您的源代码,并且传递给它的任何参数将由系统自动完成。
如果您想将数据附加到UIButton
,最简单的方法是使用@property
。
@interface MyButton : UIButton
@property (assign) int numero;
@end
@implementation MyButton
@end
然后你的构造变成:
MyButton *boutonSuppr = [MyButton buttonWithType:UIButtonTypeRoundedRect];
boutonSuppr.numero = numero;
// etc.
答案 2 :(得分:0)
动作方法应该将对象指针作为参数。 通常这是类型id,但有时是更具体的对象。 关键是它是一个指针,这意味着如果传入指针,你可以在C中填充任何东西。 为方便起见,只需使用一个对象并将值包装在对象中。 您可以将NSValue用于任何C类型包装器或NSNumber用于标量