如何获得许多UIButton的标签,但具有相同的动作选择器

时间:2012-01-30 03:44:57

标签: iphone objective-c ios

我有一个显示10个(或更多)UIButton的方法。我这里有一个关于我如何显示这些按钮的代码..

-(void)showButtons{
for(int i = 0; i < 10; i++){
  UIButton *button = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
  button.frame = CGRectMake(x, y, 100, 94);  //Assume x and y have values
  **button.tag = i + 1000;**
  [button setBackgroundImage:[_cardImages objectAtIndex:i]  
      forState:UIControlStateNormal];
  [button addTarget:self action:@selector(myMethod:)   
      forControlEvents:UIControlEventTouchUpInside];
  [self.view add subview:button];
  [button release];

} }

-(IBAction)myMethod:(id)sender{
// I would like to print here button.tag, but I always get an error

}

4 个答案:

答案 0 :(得分:3)

您需要在此处对发件人进行类型转换,因为 id 类型没有标记属性。
新代码将是


-(IBAction)myMethod:(id)sender{
   UIButton *pressedButton = (UIButton *)sender;
   NSLog(@"Tag of button pressed:%d",pressedButton.tag);
}

答案 1 :(得分:0)

您将通过打印sender.tag而不是button.tag

的值来获得结果
-(IBAction)myMethod:(id)sender{
NSLog(@"%d",sender.tag);
}

答案 2 :(得分:0)

尝试访问UIButton的UIView,然后访问它的TAG属性。所以修改Amresh Kumar的代码:

-(IBAction)myMethod {
 UIButton *pressedButton = (UIButton *)sender;
 NSLog(@"Tag of button pressed:%d",pressedButton.view.tag);
}

答案 3 :(得分:0)

你的myMethod的定义应该是这样的

我使用相同的方式来获取发件人的标签。

-(IBAction)myMethod:(id)sender
{
   NSLog(@"%d",[sender tag]);
}

不需要类型转换,你可能会获得发送者的标记,它的数据类型无关紧要。