通过选择器传递参数

时间:2011-08-12 18:18:07

标签: iphone objective-c

here中存在类似的问题但由于某种原因我无法使其发挥作用。

我创建了很多按钮,所以我用代码动态创建它们。所以下面的代码创建了一个按钮,当触摸它时,它执行aMethod:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self 
           action:@selector(aMethod)
 forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Hello" forState:UIControlStateNormal];
button.frame = CGRectMake(40.0, 200.0, 170.0, 40.0);
[self.view addSubview:button];

-(void) aMethod{
   //code
}

在aMethod中我想知道按下按钮是因为许多按钮指向该方法。结果我需要我的aMethod看起来像:

-(void) aMethod:(id) sender{
   //code
}

如果我更改了aMethod,那么我必须更改选择器:

[button addTarget:self 
               action:@selector(aMethod:)
     forControlEvents:UIControlEventTouchDown];

当我点击按钮时出现错误。所以,通过阅读我发布的第一个链接上的帖子,我发现选择器会弹出一个按钮,所以我尝试将aMethod更改为:

-(void) aMethod:(UIButton*) sender{
       //code
    }

我仍然收到错误。如何通过选择器传递按钮?

1 个答案:

答案 0 :(得分:1)

我不太明白你在问什么,但ID是一个代表其他对象的任意对象(想想动态类型?)。不要将选择器方法的数据类型从ID更改为其他任何内容。

如果是UIButtons触发的方法,则可以访问如下按钮:

-(void) aMethod:(id)sender {
UIButton *pressedButton = (UIButton *)sender;
}

现在你有了触发选择器方法触发的任何按钮的UIButton对象。

告诉哪个按钮触发了选择器的一种方法,给它们标记,然后检查aMethod:中的标记。使用上面的代码制作指向按钮对象的指针后,您将可以访问pressedButton.tag