获取选择器上的标记值

时间:2013-12-14 13:24:39

标签: ios tags uibutton

我正在使用iphone项目。在那里我添加了3个具有相同选择器名称的按钮(即动作)。现在我使用查询从数据库中获取数据。但只有当我按下三个按钮时,它才向我显示数据到第三个按钮。

btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(80, 30, 200, 50);
[btn.layer setBorderWidth:0];
btn.tag = 1;
[btn setTitle:@"1" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(detail:) forControlEvents:UIControlEventTouchUpInside];
btn.titleLabel.font = [UIFont fontWithName:@"Zapfino" size:14.0];
[scrollview addSubview:btn];


btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(80, 30, 200, 50);
[btn.layer setBorderWidth:0];
btn.tag = 2;
[btn setTitle:@"2" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(detail:) forControlEvents:UIControlEventTouchUpInside];
btn.titleLabel.font = [UIFont fontWithName:@"Zapfino" size:14.0];
[scrollview addSubview:btn];


btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(80, 30, 200, 50);
[btn.layer setBorderWidth:0];
btn.tag = 3;
[btn setTitle:@"3" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(detail:) forControlEvents:UIControlEventTouchUpInside];
btn.titleLabel.font = [UIFont fontWithName:@"Zapfino" size:14.0];
[scrollview addSubview:btn];

这是我正在使用的动作。

-(IBAction)detail:(id)sender
{
    detailViewController *detailvc =[[detailViewController alloc]initWithNibName:@"detailViewController" bundle:Nil];
     detailvc.btntxt = btn.tag;
    NSLog(@"name of btn :%ld",(long)btn.tag);
    [self.navigationController pushViewController:detailvc animated:YES];
}

在nslog中我也只获得了第3个按钮的标签 请帮我解决这个问题...

6 个答案:

答案 0 :(得分:1)

您正在为按钮分配1个标签

btn.tag = 1;

为每个按钮添加不同的标签

-

同样在您的detail:中,从发件人处获取标记,而不是实例变量

 - (IBAction)detail:(UIButton *)sender {
    detailViewController *detailvc =[[detailViewController alloc]initWithNibName:@"detailViewController" bundle:Nil];
    detailvc.btntxt = sender.tag;
    NSLog(@"name of btn :%ld",(long) sender.tag);
    [self.navigationController pushViewController:detailvc animated:YES];
}

答案 1 :(得分:0)

将所有3个按钮的标签编号设置为相同的值(1)。如果您希望能够区分按钮,则需要使用不同的值。

将标签1用作第一个按钮,将标签2用于第二个按钮,将标签3用于第三个按钮。

答案 2 :(得分:0)

使用sender变量获取触发操作的按钮:

-(IBAction)detail:(id)sender
{
    UIButton *button = (UIButton *)sender;
    NSInteger buttonTag = button.tag;
    // etc
}

另外,给每个按钮指定它自己的标签

btn.tag = 2; // and 3

不要在action方法中使用btn变量。它只会包含最后一个设置变量,在这种情况下是第三个按钮。

答案 3 :(得分:0)

只需使用((UIButton)sender).tag代替btn.tag

答案 4 :(得分:0)

您的代码的主要问题是您只使用单个按钮对象(并初始化它三次以及添加三个不同的标记并将其添加到子视图中。),这看起来像一个ivar。

因此,即使您为单个对象实例添加了三个不同的标签,最近的标签也会被反映出来。所以你一直只得到3个标签。

btn = [UIButton buttonWithType:UIButtonTypeCustom];
....
btn.tag = 1;
.
.
btn = [UIButton buttonWithType:UIButtonTypeCustom];
...
btn.tag = 2;
.
.
btn = [UIButton buttonWithType:UIButtonTypeCustom];
...
btn.tag = 3

相反,你要么不在你的目标方法中使用btn对象,要么你可以有三个不同的按钮以便更好地理解。

UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom];
btn1.frame = CGRectMake(80, 30, 200, 50);
....
btn1.tag = 1;
.
.
UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeCustom];
btn2.frame = CGRectMake(80, 80, 200, 50);
...
btn2.tag = 2;
.
.
UIButton* btn3 = [UIButton buttonWithType:UIButtonTypeCustom];
btn3.frame = CGRectMake(80, 130, 200, 50);
...
btn3.tag = 3

您需要将目标方法的代码修改为

-(IBAction)detail:(UIButton *)sender
{
    detailViewController *detailvc =[[detailViewController alloc]initWithNibName:@"detailViewController" bundle:Nil];
     detailvc.btntxt = sender.tag;
    NSLog(@"name of btn :%ld",(long)sender.tag);
    [self.navigationController pushViewController:detailvc animated:YES];
}

我希望这对你有所帮助。

答案 5 :(得分:0)

-(IBAction)detail:(UIButton*)sender
{  
 if(sender.tag==1)
 {

 }
 else if(sender.tag==2)
 {

 }
 else if(sender.tag==3)
 {

 }
}