我正在使用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个按钮的标签 请帮我解决这个问题...
答案 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)
{
}
}