在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
}
我仍然收到错误。如何通过选择器传递按钮?
答案 0 :(得分:1)
我不太明白你在问什么,但ID是一个代表其他对象的任意对象(想想动态类型?)。不要将选择器方法的数据类型从ID更改为其他任何内容。
如果是UIButtons触发的方法,则可以访问如下按钮:
-(void) aMethod:(id)sender {
UIButton *pressedButton = (UIButton *)sender;
}
现在你有了触发选择器方法触发的任何按钮的UIButton对象。
告诉哪个按钮触发了选择器的一种方法,给它们标记,然后检查aMethod:
中的标记。使用上面的代码制作指向按钮对象的指针后,您将可以访问pressedButton.tag