长按手势在 UIButton 中显示图像

Posted

技术标签:

【中文标题】长按手势在 UIButton 中显示图像【英文标题】:Show an image in a UIButton on long press gesture 【发布时间】:2012-01-26 16:14:08 【问题描述】:

我有以下问题。我有一个UIScrollView,上面有几个按钮,这些按钮上的图标设置为图像。我有一个长按识别器连接到每个按钮。如何在长按手势的发件人按钮上显示较小的删除图标?我的目标是创建当用户想要删除特定应用程序时 ios 呈现的行为。 这是按钮的代码(带图像):

//set the button with the image of conference here.
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(3, 3, w-5, h-5);
CALayer * l = [button layer];
[l setMasksToBounds:YES];
[l setCornerRadius:8.0];
[button setImage:thumb forState:UIControlStateNormal];

button.property = confInfo;
[button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
button.tag = i; 
bView.tag = i;

//Add gesture recognizer to be used for deletion of conference.
UILongPressGestureRecognizer *pahGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGestureRecognizerStateChanged:)];

pahGestureRecognizer.minimumPressDuration = 1.0;
[button addGestureRecognizer:pahGestureRecognizer];

这段代码在一个循环中(见代码中的 i)。我的长按动作是这样的:

- (void)longPressGestureRecognizerStateChanged:(UIGestureRecognizer *)gestureRecognizer 

      switch (gestureRecognizer.state) 

          case UIGestureRecognizerStateEnded:
               NSLog(@"Tapped!!!");                    
               break;

          default:
               break;
      
 

如何将单击的按钮传递给此操作,以在按钮的右上角显示较小的 X 图像?

【问题讨论】:

【参考方案1】:

您的手势识别器应通过其视图属性附加到 UIButton。

case UIGestureRecognizerStateEnded:
    NSLog(@"Tapped!!!");
    [((UIButton*)gestureRecognizer.view) setImage:thumbWithX forState:UIControlStateNormal];
    break;

【讨论】:

如果将高亮或选中的图像设置为带有X的图像,那么您可以简单地更改按钮的状态而不是更改图像,这样会更好一些,但取决于是否你已经在使用这些状态图像了。 @Fls'Zen:我对点击事件有一个动作,所以我想在长按时显示一个小图像。我也有一点看这个按钮是哪个,带有X的图像实际上是一个带有动作的按钮。

以上是关于长按手势在 UIButton 中显示图像的主要内容,如果未能解决你的问题,请参考以下文章

当有长按手势识别器时,UIButton 不会改变文本颜色

复制iOS的仪表板应用按钮,一个带有长按手势识别器的按钮

在滑动手势识别器上禁用“在突出显示时显示触摸”

在tableview自定义单元格中的图像上长按手势

UIAlertView 警报在长按手势识别器中重复三次

UIAlertView 警报在长按手势识别器中重复三次