在iOS中编程实现UIImageView的点击事件

103

我正在展示一张图片,以下是代码:

UIImageView *preArrowImage =[[UIImageView alloc]init ];
preArrowImage.image =[UIImage imageNamed:@"arrowprev.png"];
preArrowImage.frame = CGRectMake(20, 60, 10, 30);
[self.view addSubview:preArrowImage];

我希望能够以编程方式处理preArrowImage上的触摸事件。


这可能会有些用处 https://dev59.com/12ox5IYBdhLWcg3wvWoy - GWed
检查这个答案会对您有所帮助 https://dev59.com/NmQn5IYBdhLWcg3wETvj#41328885。 - Mohamed Jaleel Nazir
8个回答

260

SWIFT 5

let preArrowImage : UIImageView // also give it frame
let singleTap = UITapGestureRecognizer(target: self, action: #selector(tapDetected))
preArrowImage.isUserInteractionEnabled = true
preArrowImage.addGestureRecognizer(singleTap)

//Action
 func tapDetected() {
    print("Imageview Clicked")
}

Objective-C

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected)];
singleTap.numberOfTapsRequired = 1;
[preArrowImage setUserInteractionEnabled:YES];
[preArrowImage addGestureRecognizer:singleTap];
 
-(void)tapDetected{
    NSLog(@"single Tap on imageview");
  }

对于Swift 2,您应该将Selector("tapDetected")替换为:"tapDetected:" - dy_
默认情况下,singleTap.numberOfTapsRequired=1。祝编码愉快!谢谢。 - Ravi
让singleTap = UITapGestureRecognizer(target: self, action: #selector(NavigationViewController.tapDetectedImage)) - Alex22
这真是太棒了。 - hbtpoprock

18

只需在图像上添加UITapGesture,但记得要使其UserInteraction Enabled

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self 
    action:@selector(singleTapGestureCaptured:)];
    [preArrowImage addGestureRecognizer:singleTap];
    [preArrowImage setMultipleTouchEnabled:YES];
    [preArrowImage setUserInteractionEnabled:YES];

6

现在使用Swift!

let singleTap = UITapGestureRecognizer(target: self, action: Selector("tapDetected"))
singleTap.numberOfTapsRequired = 1

preArrowImage.userInteractionEnabled = true
preArrowImage.addGestureRecognizer(singleTap)


//Action
func tapDetected() {
    println("Single Tap on imageview")
}

4

Swift 3

在UIImageView上启用用户交互

 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesEnded(touches, with: event)

        if let touch = touches.first {
            if touch.view == self.imgVwPostPreview { //image View property

                //Do your actions
                //self.delegate?.didClickOnCellImageView(indexPath: self.cellIndexPath!)
            }
        }
    }

3
使用故事板在视图控制器中与视图一起使用。
选择其中一个手势识别器,将其拖到您的控制器中。现在它将显示在“文档大纲”和视图控制器xib的标题中。
将手势拖动到UILable上。
在头文件中手动创建(IBAction)方法。
现在将其从处理程序拖到xib中的手势图标上进行链接。

1

Xamarin.iOS

UIImageView preArrowImage; // also give it frame
var singleTap = new UITapGestureRecognizer(TapDetected);
singleTap.ShouldReceiveTouch -= TapGesture_ShouldReceiveTouch;
singleTap.ShouldReceiveTouch += TapGesture_ShouldReceiveTouch;
preArrowImage.UserInteractionEnabled = true;
preArrowImage.AddGestureRecognizer(singleTap)

bool TapGesture_ShouldReceiveTouch(UIGestureRecognizer recognizer, UITouch touch)
{
    return true;
}

void TapDetected(UITapGestureRecognizer tapGestureRecognizer)
{
    print("Imageview Clicked")
}

0
如果您的UIImageView是从Storyboard或Nib获取的IBOutlet,则可以向图像视图添加UIGestureRecognizer,启用用户交互并将IBAction连接到手势识别器。
有关更多信息,请查看我在此问题上的答案:如何使Storyboard上的UIImageView可点击(Swift)

0

这里有另一个选项:作弊。

我的意思是,要有侧面思考。

按照您的需求设置UIImage,裁剪,适应比例等等。

用UIView覆盖它(相同尺寸,位置等)。

将背景设置为clearcolour,并将类设置为UIControl。

将touch up inside事件指向您的处理程序,完成。


比一个 UIView 还要简单:使用一个按钮并删除文本。 ;) - Neph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接