2015-03-23 14 views
16

Sono nuovo di swift (e lo sviluppo di Xcode in generale) e mi chiedevo come fare un ImageView sullo storyboard cliccabile. Quello che sto cercando di fare è renderlo così quando viene cliccato, mostra un altro controller di visualizzazione.Come rendere UIImageView sullo storyboard selezionabile (rapido)

+0

controllo questo fuori http://stackoverflow.com/a/27235390/3810673 – Ian

risposta

36

È possibile aggiungere tapGesture per questo. Ecco il codice:

class ViewController: UIViewController { 

@IBOutlet weak var imageView: UIImageView! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // create tap gesture recognizer 
    let tapGesture = UITapGestureRecognizer(target: self, action: "imageTapped:") 

    // add it to the image view; 
    imageView.addGestureRecognizer(tapGesture) 
    // make sure imageView can be interacted with by user 
    imageView.userInteractionEnabled = true 
} 

func imageTapped(gesture: UIGestureRecognizer) { 
    // if the tapped view is a UIImageView then set it to imageview 
    if let imageView = gesture.view as? UIImageView { 
     println("Image Tapped") 
     //Here you can initiate your new ViewController 

     } 
    } 
} 

Swift 3,0

class ViewController: UIViewController { 

    @IBOutlet weak var imageView: UIImageView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // create tap gesture recognizer 
     let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.imageTapped(gesture:))) 

     // add it to the image view; 
     imageView.addGestureRecognizer(tapGesture) 
     // make sure imageView can be interacted with by user 
     imageView.isUserInteractionEnabled = true 
    } 

    func imageTapped(gesture: UIGestureRecognizer) { 
     // if the tapped view is a UIImageView then set it to imageview 
     if (gesture.view as? UIImageView) != nil { 
      print("Image Tapped") 
      //Here you can initiate your new ViewController 

     } 
    } 
} 
+4

Anche se questa è una possibilità, è molto meglio creare un 'UIButton' con un'immagine piuttosto che fare clic su un'immagine. Quando aggiungi le opzioni di accessibilità, mi ringrazierai. – vrwim

4

Suggerirei di creare un UIButton senza testo e renderlo invece l'immagine che si desidera. Dopo averlo fatto, puoi trascinare CTRL dall'immagine al controller della vista che vuoi seguire. Oppure puoi semplicemente creare un IBAction nel codice del tuo controller di visualizzazione che segue manualmente.

+0

Questo funziona abbastanza bene. È possibile configurare UIImageView incorporato anche nel pulsante. Evita il problema del livello misto che aveva il vecchio trucco di sovrapporre un UIImageView a un pulsante trasparente. –

2

Nello storyboard impostare un'immagine interazione vista utente abilitato e quindi ottenere con questo metodo

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 

    if ([touch view] == yourImageView) 
    { 
      //add your code for image touch here 
    } 
} 
2

per SWIFT versione 3.0 prova sottostante Codice

override func viewDidLoad() { 
super.viewDidLoad() 

let tap1 = UITapGestureRecognizer(target: self, action: #selector(tapGesture1)) 
imageview.addGestureRecognizer(tap1) 
imageview.isUserInteractionEnabled = true 
} 
func tapGesture1() { 
    print("Image Tapped") 
} 
9

Puoi farlo ancora più facile e fare un cliccabile immagine tramite Storyboard senza codifica.

  • In primo luogo è necessario trascinare un UITapGestureRecognizer sul vostro UIImageView in Storyboard.
  • Poi si crea l'IBAction che si desidera eseguire nel codice con @IBAction func imageClicked(_ sender: Any) {}
  • Dopodiché è necessario collegare il UITapGestureRecognizer alla IBAction nella tua classe selezionando il sistema di riconoscimento gesto nel Document Outline, poi il passaggio alla Connection Inspector Tab e trascinando il Sent Actions ->Selector per il tuo UIViewController dove si seleziona l'azione appropriata creata in precedenza.
  • Infine, è necessario impostare la casella di controllo User Interaction Enabled nella vista dell'immagine.

Fatto, un UIImageView completamente cliccabile senza scrivere una singola riga di codice tranne la funzione ovvia che si desidera richiamare. Ma hey, se per esempio vuoi spingere un seguito invece, puoi passare senza codifica usando i riconoscimenti di gesture Triggered Segues invece del suo Sent Actions.

Anche se gli storyboard hanno i loro limiti, non c'è bisogno di scrivere codice per le immagini cliccabili. ;)

enter image description here

Problemi correlati