当前位置:  开发笔记 > IOS > 正文

如何将变量传递给UIButton操作

如何解决《如何将变量传递给UIButton操作》经验,为你挑选了4个好方法。

我想将变量传递给UIButton动作,例如

NSString *string=@"one";
[downbutton addTarget:self action:@selector(action1:string)
     forControlEvents:UIControlEventTouchUpInside];

我的动作功能如下:

-(void) action1:(NSString *)string{
}

但是,它返回语法错误.如何将变量传递给UIButton操作?



1> diciu..:

将其更改为:

[downbutton addTarget:self action:@selector(action1:) forControlEvents:UIControlEventTouchUpInside];

我不知道Iphone SDK,但按钮操作的目标可能会收到一个id(通常名为sender).

- (void) buttonPress:(id)sender;

在方法调用中,sender应该是你的情况下的按钮,允许你读取它的名称,标签等属性.



2> leviathan..:

如果您需要区分多个按钮,那么您可以使用以下标签标记您的按钮:

[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 *



3> 小智..:

您可以使用关联引用将任意数据添加到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);
  ...
}



4> Eddy..:

另一个传递变量的选项,我发现它比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
}

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有