2012-07-04 9 views
22

Sto cercando di fare un UIImageView accettare azioni e sparare loro ogni essa cliccato sul UIImageVie, ma sto avendo difficoltà a farlo funzionare, ti prego di aiutarmiUIImageView come pulsante

ma qui è quello che sto facendo:

[View setUserInteractionEnabled:YES]; 

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


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

risposta

65

Objective-C

nel metodo viewDidLoad: scrivere questo:

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

quindi chiamare il vostro gesto metodo come questo:

-(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 sto provando, ma non succede nulla ... la console non stampa nulla (tra l'altro per iphone) – user1480092

+0

Appena risolto, un altro codice stava bloccando la mia app .. ma grazie! – user1480092

+0

Per Swift3: imageView.isUserInteractionEnabled = true – akr

0

UIImageView non è un UIControl in modo che non ha il metodo addTarget:action:forControlEvents come parte della sua interfaccia. Puoi invece utilizzare un riconoscitore di gesti.

+0

Si dice: la classe 'MainViewController' non implementa il protocollo 'UIGestureRecognizerDelegate', cosa devo fare? – user1480092

+0

Aggiungi UITapGestureRecognizerDelegate alla tua classe (di solito metto l'interfaccia del file .h, ma puoi anche farlo nella dichiarazione dell'interfaccia .m) – Septronic

9

UIImageView non è un controllo, non è possibile aggiungere un target per gli eventi . Hai diverse opzioni:

Posiziona un invisibile UIButton sul UIImageView e aggiungi il tuo obiettivo. È possibile impostare lo stile del pulsante su personalizzato e il relativo testo (e immagine) su nulla per renderlo invisibile.

Utilizzare solo un UIButton. È possibile aggiungere un'immagine di sfondo ad esso.

Aggiungi un UITapGestureRecognizer alla visualizzazione dell'immagine e implementa il suo metodo di gestione del tocco.

Sottoclasse UIImageView e sovrascrivere i metodi di gestione del tocco per fare tutto ciò che è necessario fare.

1

Io non sono un professionista, ma pulsante è possibile utilizzare per questo

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

Tutto quello che dovete fare è trascinare un Recognizer Tap Gesture sul ImageView (in Storyboard) e consentire l'interazione dell'utente sul ispettore attributi. Se si desidera utilizzare l'immagine come collegamento a un altro controller di visualizzazione, è sufficiente tenere premuto il tasto sinistro del mouse e trascinare l'icona Toccare Gesture Recognizer nella parte inferiore del controller di visualizzazione sul controller di visualizzazione di destinazione.