标签改变它的价值

Tag changes it value

我不明白为什么标签第三次等于0

UIButton *b1;
 - (void)viewDidLoad
{
    b1 =[[UIButton alloc] init];
    b1.tag = 1;
    NSLog(@"Button pressed: %d", b1.tag); // tag = 1
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
- (void)funcA:(id)sender // I create mannualy the button b1
{
    NSLog(@"Button pressed 2nd: %d", b1.tag); // tag = 1
    b1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
b1.frame = CGRectMake(50, 50, 50, 50);
[b1 setTitle:@"b1" forState:UIControlStateNormal];
[self.view addSubview:b1];
[b1 addTarget:self action:@selector(funcB:) forControlEvents:UIControlEventTouchUpInside ];

}
-(void)funcB:(id)sender //the func of B1
{
    NSLog(@"Button 3rd %d", b1.tag); // here the tag = 0


}

我希望我所要求的是可能的。 ^^

当你这样做时:

b1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];

您正在制作一个新按钮。

您可以为此更改代码:

UIButton *b1;
- (void)viewDidLoad
{
  [super viewDidLoad];
  b1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  b1.tag = 1;
  b1.frame = CGRectMake(50, 50, 50, 50);
  [b1 setTitle:@"b1" forState:UIControlStateNormal];

  NSLog(@"Button pressed: %d", b1.tag); // tag = 1
  // Do any additional setup after loading the view, typically from a     nib.
}
- (void)funcA:(id)sender // I create mannualy the button b1
{
  NSLog(@"Button pressed 2nd: %d", b1.tag); // tag = 1
  [b1 addTarget:self action:@selector(funcB:) forControlEvents:UIControlEventTouchUpInside ];
  [self.view addSubview:b1];

}
-(void)funcB:(id)sender //the func of B1
{
   NSLog(@"Button 3rd %d", b1.tag); // here the tag = 1
}

viewDidLoad 中,您正在创建一个按钮,但没有将其保存在任何地方(您没有使用 b1 实例变量,而是有一个局部变量恰好具有名称 name ) 而不是将它添加到任何视图,因此它将在函数完成时释放。

funcA 中,您正在实例化一个完全不同的按钮(不是用户按下的按钮,也不是在 viewDidLoad 中创建和丢弃的按钮)。您也永远不会为这个新按钮设置 tag。 (坦率地说,根本不清楚什么叫 funcA;你的故事板上有按钮或类似的东西吗?!?)

最重要的是,如果您希望 funcB 显示您在 funcA 中创建的按钮的 tag,则必须为该按钮设置 tagfunk.


funcB 中,引用 sender 来识别按下了哪个按钮是很有用的,例如:

- (void)createButton
{
    b1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    b1.frame = CGRectMake(50, 50, 50, 50);
    b1.tag = 42;
    [b1 setTitle:@"b1" forState:UIControlStateNormal];
    [self.view addSubview:b1];
    [b1 addTarget:self action:@selector(funcB:) forControlEvents:UIControlEventTouchUpInside];
}

- (void)funcB:(UIButton *)sender
{
    NSLog(@"Button tag %d", sender.tag);  // the answer is 42
}