4

我有按钮:

...

UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton setTitle:annotation.title forState:UIControlStateNormal];
rightButton.tag = myCustomNumber;
[rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
...

这是IBAction:

..
-(IBAction)showDetails:(id)sender{

    // here I want to NSLOG button tag

}
...

怎么做?

4

3 回答 3

11

只需将您的发件人投射到 UIControl

-(IBAction)showDetails:(UIControl *)sender {

    // here I want to NSLOG button tag
    NSLog(@"%d",sender.tag);

}
于 2012-05-31T10:03:18.427 回答
3

如果总是从 a 调用 showDetails,UIButton您可以将方法的名称更改为:

- (IBAction)showDetails:(UIButton *)sender {
        NSLog(@"%i", (UIButton *)sender.tag);
}

请记住在接口文件中也执行此更改

但是,如果您使用来自不同 IBAction 元素的 showDetails ,则必须自省并检查 sender 是否为 UIButton:

- (IBAction)showDetails:(id)sender {
       if ([sender isKindOfClass:[UIButton class]]
       NSLog(@"%i", (UIButton *)sender.tag);
}

编辑:这样做的原因是在您编写代码的方式中,sender 具有动态类型id并且它没有任何tag属性。

于 2012-05-31T10:04:15.920 回答
2
NSLog("%d", (UIButton *)sender.tag);

sender 是一个 UIButton 对象。希望能帮助到你。快乐编码:)

于 2012-05-31T10:01:36.030 回答