2012-07-04 17 views
22

que estoy tratando de hacer una UIImageView aceptar acciones y el fuego de ellos cada vez que hace clic en el UIImageVie, pero estoy teniendo dificultades en conseguir que funcione, por favor me ayudeUIImageView como botón

pero aquí es lo que estoy haciendo:

[View setUserInteractionEnabled:YES]; 

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


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

Respuesta

65

Objective-C

En el método de viewDidLoad: escribir esto:

-(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]; 
} 

luego llame a su gesto método como este:

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

Swift

override func viewDidLoad() { 
    super.viewDidLoad() 

    let imageView: UIImageView = UIImageView(frame: CGRectMake(100.0, 100.0, 100.0, 100.0)) 
    imageView.image = UIImage(named: "image.png") 
    imageView.userInteractionEnabled = true 

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

    self.view.addSubview(imageView) 
} 

func singleTapping(recognizer: UIGestureRecognizer) { 
    print("image clicked") 
} 
+0

lo intento, pero no ocurre nada ... la consola no imprime nada (por cierto para iphone) – user1480092

+0

Acabo de arreglarlo, otro código bloqueaba mi aplicación ... ¡pero gracias! – user1480092

+0

Para Swift3: imageView.isUserInteractionEnabled = true – akr

0

UIImageView no es un UIControl por lo que no tiene el método addTarget:action:forControlEvents como parte de su interfaz. Puede usar un reconocedor de gestos en su lugar.

+0

Dice: class 'MainViewController' no implementa el protocolo 'UIGestureRecognizerDelegate', ¿qué debo hacer? – user1480092

+0

Agregue el UITAPGestureRecognizerDelegate a su clase (normalmente lo pongo en la interfaz de archivo .h, pero también puede hacerlo en la declaración de la interfaz .m) – Septronic

9

UIImageView no es un control, no puede agregar un objetivo para controlar eventos a él. Tiene varias opciones:

Coloque un UIButton invisible sobre el UIImageView y agregue su objetivo a eso. Puede configurar el estilo del botón en personalizado y su texto (y la imagen) en nada para que sea invisible.

Utilice solo un UIButton. Puedes agregarle una imagen de fondo.

Agregue UITapGestureRecognizer a su vista de imagen e implemente su método de manejo táctil.

Subclase UIImageView y anule los métodos de manejo táctil para hacer todo lo que necesite hacer.

1

no soy un profesional, pero de botón que puede utilizar para este

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]; 
8

Todo lo que tiene que hacer es arrastrar un reconocedor Tap gesto hacia el imageView (en el guión gráfico) y permitir la interacción del usuario en el Inspector de Atributos. Si desea utilizar la imagen como un enlace a otro controlador de vista, simplemente mantenga presionada la tecla del icono Tap Gesture Recognizer en la parte inferior del controlador de vista al controlador de vista de destino.