我想将变量传递给UIButton动作,例如
NSString *string=@"one"; [downbutton addTarget:self action:@selector(action1:string) forControlEvents:UIControlEventTouchUpInside];
我的动作功能如下:
-(void) action1:(NSString *)string{ }
但是,它返回语法错误.如何将变量传递给UIButton操作?
将其更改为:
[downbutton addTarget:self action:@selector(action1:) forControlEvents:UIControlEventTouchUpInside];
我不知道Iphone SDK,但按钮操作的目标可能会收到一个id(通常名为sender).
- (void) buttonPress:(id)sender;
在方法调用中,sender应该是你的情况下的按钮,允许你读取它的名称,标签等属性.
如果您需要区分多个按钮,那么您可以使用以下标签标记您的按钮:
[downbutton addTarget:self action:@selector(buttonPress:) forControlEvents:UIControlEventTouchUpInside]; downButton.tag = 15;
在您的操作委托方法中,您可以根据其先前设置的标记处理每个按钮:
(void) buttonPress:(id)sender { NSInteger tid = ((UIControl *) sender).tag; if (tid == 15) { // deal with downButton event here .. } //... }
更新:sender.tag应该是一个NSInteger
而不是一个NSInteger *
您可以使用关联引用将任意数据添加到UIButton:
static char myDataKey; ... UIButton *myButton = ... NSString *myData = @"This could be any object type"; objc_setAssociatedObject (myButton, &myDataKey, myData, OBJC_ASSOCIATION_RETAIN);
对于策略字段(OBJC_ASSOCIATION_RETAIN),请为您的案例指定适当的策略.关于动作委托方法:
(void) buttonPress:(id)sender { NSString *myData = (NSString *)objc_getAssociatedObject(sender, &myDataKey); ... }
另一个传递变量的选项,我发现它比leviatan的答案中的标记更直接,就是在accessibilityHint中传递一个字符串.例如:
button.accessibilityHint = [user objectId];
然后在按钮的动作方法中:
-(void) someAction:(id) sender { UIButton *temp = (UIButton*) sender; NSString *variable = temp.accessibilityHint; // anything you want to do with this variable }