Haga clic en Evento en UIImageView mediante programación en ios

95

Estoy mostrando una imagen del código aquí está el código

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

Quiero manejar el evento táctil en preArrowImage mediante programación.

Sumit Patel
fuente
Esto puede ser de alguna utilidad stackoverflow.com/questions/9008975/…
Gaz_Edge
Marque esta respuesta le ayudará http://stackoverflow.com/a/41328885/3177007
Mohamed Jaleel Nazir

Respuestas:

250

C objetivo

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 4.2 / 5

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

//Action
@objc func tapDetected() {
    print("Imageview Clicked")
}
Vivek Sehrawat
fuente
para Swift 2, debe reemplazarlo Selector("tapDetected")con:"tapDetected:"
datayeah
Por defecto singleTap.numberOfTapsRequired = 1, Happy Coding Thanks
Ravi
'let singleTap = UITapGestureRecognizer (target: self, action: #selector (NavigationViewController.tapDetectedImage))'
Alex22
18

Simplemente agregue un UITapGestureen la imagen, pero recuerde que debe habilitar UserInteraction .

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

¡Ahora en 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")
}
Sakiboy
fuente
4

Swift 3

En UIImageView, habilite UserInterAction

 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!)
            }
        }
    }
Mohamed Jaleel Nazir
fuente
3

Usando storyboard con vista en el controlador de vista.
la vista puede ser ImageView, UIView, UILabel, TextField u otro controlador


Después de seleccionar uno de los reconocedores de gestos, arrástrelo a su controlador.
Ahora se mostrará en "Esquema del documento" y el encabezado del controlador de vista xib.

Icono de gesto en la línea de salida del documento y xib
Arrastre el gesto a UILable
Arrastre el gesto a UILable


Crear manualmente el método (IBAction) en el archivo de encabezado


crear el método IBAction en el archivo de encabezado
Ahora arrástrelo desde el controlador al icono de gesto en xib
Vincularlo con el icono de gesto

Subhash
fuente
0

Aquí hay otra opción: hacer trampa.

Quiero decir, piensa lateralmente.

Configure su UIImage como desee, recortado, con ajuste de aspecto, lo que sea.

Superponga esto con una UIView (dimensiones iguales, posición, etc.)

Establezca el fondo en clearcolour y la clase en UIControl.

Apunta el evento de retoque interno a tu manejador y listo.

Raki
fuente
Incluso más fácil que una UIView: use un botón y elimine el texto. ;)
Neph
0

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")
}
Olivier MATROT
fuente