26

我正在尝试让 UIImageView 接受操作并在每次单击 UIImageVie 时触发它们,但我很难让它工作,请帮帮我

但这是我正在做的事情:

[View setUserInteractionEnabled:YES];

[View addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventTouchUpInside];


- (void) myAction:(id)sender
{
    NSLog(@"It works!");
}
4

5 回答 5

77

Objective-C

在您的viewDidLoad:方法中写下:

-(void)viewDidLoad {

    UIImageView *imageview = [[UIImageView alloc]initWithFrame:CGRectMake(100.0, 100.0, 100.0, 100.0)];
    [imageview setImage:[UIImage imageNamed:@"image.png"]];
    [imageview setUserInteractionEnabled:YES];

    UITapGestureRecognizer *singleTap =  [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapping:)];
    [singleTap setNumberOfTapsRequired:1];
    [imageview addGestureRecognizer:singleTap];

    [self.view addSubview:imageview];
}

然后像这样调用你的手势方法:

-(void)singleTapping:(UIGestureRecognizer *)recognizer {
    NSLog(@"image clicked");
}

迅速

override func viewDidLoad() {
    super.viewDidLoad()

    let imageView: UIImageView = UIImageView(frame: CGRect(x: 100.0, y: 100.0, width: 100.0, height: 100.0))
    imageView.image = UIImage(named: "image.png")
    imageView.isUserInteractionEnabled = true

    let singleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.singleTapping(recognizer:)))
    singleTap.numberOfTapsRequired = 1
    imageView.addGestureRecognizer(singleTap)

    self.view.addSubview(imageView)
}

@objc func singleTapping(recognizer: UIGestureRecognizer) {
    print("image clicked")
}
于 2012-07-04T14:07:25.040 回答
12

UIImageView不是控件,您不能向其添加控件事件的目标。你有几个选择:

在 上放置一个不可见UIButtonUIImageView并将您的目标添加到其中。您可以将按钮的样式设置为自定义,并将其文本(和图像)设置为空,使其不可见。

只使用一个UIButton. 您可以为其添加背景图像。

将 a 添加UITapGestureRecognizer到您的图像视图并实现它的触摸处理程序方法。

子类UIImageView化并覆盖触摸处理方法以执行您需要执行的操作。

于 2012-07-04T14:01:11.183 回答
8

您所要做的就是将 Tap Gesture Recognizer 拖到 imageView(在 Storyboard 中)并在 Attributes Inspector 上启用 User Interaction。如果您想将图像用作到另一个视图控制器的链接,只需按住控件并将视图控制器底部的 Tap Gesture Recognizer 图标拖动到目标视图控制器即可。

于 2013-01-03T17:40:18.207 回答
1

UIImageView不是 aUIControl所以它没有将该addTarget:action:forControlEvents方法作为其接口的一部分。您可以改用手势识别器。

于 2012-07-04T14:00:11.933 回答
1

我不是专业人士,但您可以为此使用按钮

UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom];
imageButton.frame = CGRectMake(0, 0, 200, 200);
[imageButton setImage:[UIImage imageNamed:@"Your_Image.png"] forState:UIControlStateNormal];
imageButton.adjustsImageWhenHighlighted = NO;
[imageButton addTarget:self action:@selector(myAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:imageButton];
于 2012-07-04T14:04:28.427 回答