向 UIImageView 添加轻击手势以更改 UILabel?

Posted

技术标签:

【中文标题】向 UIImageView 添加轻击手势以更改 UILabel?【英文标题】:Adding a tap gesture to a UIImageView to change a UILabel? 【发布时间】:2014-12-30 21:01:34 【问题描述】:

我已经在 Xcode 6 中开发 ios 单视图应用程序几天了,当我尝试添加触摸事件时遇到了障碍。这是我想要做的:

在情节提要中,我创建了一个 UILabel 和一个 UIImageView,我想向 UIImageView 添加一个点击手势,以便当我点击图像时,标签会发生变化。虽然我在 Objective-C 中编程不是很舒服,但我知道我必须首先将手势附加到 UIImageView,然后可以由我的事件处理程序方法处理。这是我尝试过的:

在 ViewController.h 文件中:

   #import <UIKit/UIKit.h>

@interface ViewController : UIViewController 

    IBOutlet UIImageView *imageView;
    IBOutlet UILabel *myLabel;



-(void)handleTap:(id)sender;

@end

在 ViewController.m 文件中:

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad 

imageView.userInteractionEnabled = YES;

UITapGestureRecognizer *pgr = [[UITapGestureRecognizer alloc]
                                 initWithTarget:self
                                         action:@selector(handleTap)];

[imageView addGestureRecognizer:pgr];

    [super viewDidLoad];


- (void)handleTap:(UITapGestureRecognizer *)tapGestureRecognizer

    myLabel.text = [NSString stringWithFormat:@"It Worked"];

我预期会发生的是,当点击 imageView 时 myLabel 会发生变化,myLabel 和 imageView 分别链接到 UILabel 和 UIImageView。而且我确实意识到,只需向 imageView 添加一个按钮,我可能会为自己省去很多麻烦,但我真的在努力让它与触摸事件一起工作。

我是这门语言的新手,这是我第一次尝试构建一些东西。我在发布此内容时已尝试尽可能详细,但如果您需要更多详细信息,我很乐意提供。非常感谢详细信息、代码示例和对各个部分如何组合在一起的解释。谢谢。

【问题讨论】:

您是否将插座连接到 Interface Builder 中的标签? 另外...您需要将这些 IBOutlets 创建为“@properties”,然后在您的实现中“@synthesize”它们。 @ElGuapo 不需要,但这是最佳实践。 @OP 如果你在 handleTap: 方法中设置一个断点,它会被命中吗? 您的操作应该是 handleTap:,而不是 handleTap。并且没有必要综合你的属性。它不再被认为是好的做法。 这是什么时候发生的??我想我需要看一些 WWDC ......感谢您的澄清 【参考方案1】:
#import "ViewController.m"

@interface ViewController ()

    IBOutlet UILabel *myLabel;
    IBOutlet UIImageView *myImage;

@end

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(Tapped:)];
    tap.numberOfTapsRequired = 1; //You can change this is double tap ect..
    Red.cancelsTouchesInView = YES;
    myImage.userInteractionEnabled = YES; //if you want touch on your image you'll need this
    [myImage addGestureRecognizer:tap];


-(void)Tapped:(UITapGestureRecognizer *)sender

    myLabel.text = [NSString stringWithFormat:@"It Worked"];


- (void)didReceiveMemoryWarning 
    [super didReceiveMemoryWarning];


@end

如果您的游戏仍然无法运行,则说明您尚未将标签和图像连接到界面构建器。要将它们连接到界面构建器,请将 do 变暗并将其连接到视图上的所需对象,如图所示,我单击点并将其拖到标签上。

【讨论】:

【参考方案2】:

您缺少 ':' 登录手势选择器。它应该是这样的:

... action:@selector(handleTap:)];

如果仍然无法正常工作,那么您的IBOutlet 连接可能是错误的。如果操作正确,您应该会在 Xcode 中看到带有点的小圆圈。 Check this sample image:

【讨论】:

我确实错过了。在我离开它几个小时后我重新做了它,它似乎工作正常。我的工作版本确实包含了您所包含的正确语法,感谢您的关注。

以上是关于向 UIImageView 添加轻击手势以更改 UILabel?的主要内容,如果未能解决你的问题,请参考以下文章

向 Scrollview 内的 UIImageView 添加长按手势

在一个 ViewController 中为 UIImageView 和 UIView 添加手势

为 iOS [Swift、iOS 15] 编写 PDF 查看器时无法激活三次轻击手势

iOS 轻击触摸和手势的检测

iOS开发之手势识别

UIImageview 掩码响应手势更新太慢