添加点击手势到UIImageView来更改UILabel?

时间:2014-12-30 21:01:35

标签: ios objective-c uiimageview uilabel uitapgesturerecognizer

我已经在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"];
}

我期望发生的事情是myLabel会在轻触imageView时发生变化,myLabel和imageView分别链接到UILabel和UIImageView。而且我意识到我可以通过向imageView添加一个按钮来节省很多麻烦,但我真的想让它与触摸事件一起工作。

我是该语言的新手,这是我第一次尝试构建某些东西。我发布这篇文章时尽量做到尽可能详细,但如果你需要更多细节,我很乐意提供。非常感谢细节,代码示例以及如何将各个部分组合在一起的解释。谢谢。

2 个答案:

答案 0 :(得分: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变暗并将其连接到视图上的所需对象,就像在此图像中一样,我单击该点并将其拖动到标签。image for connecting

答案 1 :(得分:1)

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

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

如果它仍无法正常工作,那么您的IBOutlet连接可能会出错。你应该在Xcode内看到带有圆点的小圆圈,如果它完成了。 Check this sample image: