【问题标题】:Any way I can get hold of which button I have pressed?有什么办法可以抓住我按下的按钮?
【发布时间】:2012-01-05 03:36:35
【问题描述】:

有什么方法可以让我知道我按下了哪个按钮?

按钮是使用 for 循环以编程方式创建的。

我有一个图像滚动视图(我使用图像按钮),其中图像是用户从相机拍摄的。因此,用户拍照后,“新”图片将与“旧”图片一起出现在滚动视图中。图片被缩小成更小的尺寸,所以我想要的是,当我单击(任何图像的)按钮时,图像会以实际大小在另一个视图中弹出。

图像按钮是使用 for 循环创建的。但是,我不知道如何抓住用户按下的按钮。现在,当我按下按钮时(无论是哪个图像/按钮),最后一张拍摄的照片都会显示出来。

感谢您的宝贵时间。

【问题讨论】:

  • 你很好地解释了你的问题......但是如果你添加一些相关部分的代码段总是更好,这样这里的人们就可以很容易地理解你卡在哪里了。

标签: ios objective-c cocoa-touch uibutton uiimage


【解决方案1】:

您可以使用按钮的标签属性。

创建按钮时,为每个图像按钮添加标签。

for(int i = 0 ; i < your_no_images ; i++){
  UIButton *button = [UIButton <yourbuttontype>];
 -----
  button.tag   = i;
  [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
  [yourView addSubView:button];
}

现在在按钮点击动作中..

-(void)buttonClicked:(UIButton*)sender{
   //if you has an array of UIImage's
   UIImage *clickedImage = (UIImage *)[yourImageArray objectAtIndex:sender.tag];
}

【讨论】:

  • 您好,感谢您的回复(:但是我的应用程序在到达按钮单击操作时崩溃了。
  • 在 buttonClicked 函数中设置断点,看是否被执行
  • 这是我犯的一个小错字。代码工作正常!非常感谢您的帮助(:
【解决方案2】:

IBAction 方法(例如在单击按钮时触发的方法)包含一个 sender 参数。 sender 是触发动作的对象,例如被点击的按钮。像这样:

- (IBAction)buttonWasClicked:(id)sender
{
    NSLog(@"The %@ button was clicked", (UIButton *)sender.currentTitle);
}

【讨论】:

  • OP 在问题中解释说,他/她在 for 循环中以编程方式创建按钮。那里没有 Interface Builder 或 IBAction
  • IBAction 无论如何都是无效的。这只是对 IB 的一个提示。我发布的方法对以编程方式创建的按钮的工作方式与对在 Interface Builder 中创建的按钮的工作方式相同。答案的相关部分是sender 参数。
猜你喜欢
  • 1970-01-01
  • 2011-02-12
  • 2021-09-03
  • 2014-01-11
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
相关资源
最近更新 更多