2015-01-10 8 views
118

zuweisen Ich versuche, eine Aktion eine UIImageView zuweisen, wenn der Benutzer es antippen.Wie eine Aktion für UIImageView-Objekt in Swift

Ich weiß, wie man eine Aktion für eine UIButton erstellen, aber wie könnte ich das gleiche Verhalten einer UIButton nachahmen, aber mit einer UIImageView?

Antwort

250

Sie einen UITapGestureRecognizer benötigen.

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:))) 
    imageView.isUserInteractionEnabled = true 
    imageView.addGestureRecognizer(tapGestureRecognizer) 
} 

func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) 
{ 
    let tappedImage = tapGestureRecognizer.view as! UIImageView 

    // Your action 
} 

(Sie können auch einen UIButton verwenden und weisen Sie ein Bild, um es, ohne Text und als einfach schließen Sie ein IBAction)

+0

Danke verwendet den Button als Bild und funktionierte perfekt :) – user3706773

+3

Nitpick: var tgr = UITapGestureRecognizer (Ziel: self action: Selector ("imageTapped:")), benötigt ein Komma zwischen den beiden Parametern. – sysuser

+2

wie unten von MidHun MP angegeben, stellen Sie sicher, dass Sie die userInteractionEnabled = true – Sheraz

48

Sie müssen einen Gestenerkenner hinzufügen (Verwenden Sie zum Tippen UITapGestureRecognizer, tippen und halten Sie UILongPressGestureRecognizer) an Ihre UIImageView.

let tap = UITapGestureRecognizer(target: self, action: #selector(YourClass.tappedMe)) 
imageView.addGestureRecognizer(tap) 
imageView.isUserInteractionEnabled = true 

und Umsetzung der Auswahlmethode wie:

func tappedMe() 
{ 
    println("Tapped on Image") 
} 
+10

userInteractionEnabled Schlüssel. – kennydust

+0

das funktioniert nicht für mich "Hilfe" – hatim

+0

@ hatim: Was ist das Problem, vor dem Sie stehen? Wenn Sie ein neues Problem haben, senden Sie es bitte als neue Frage. –

7

Sie könnten tatsächlich eingestellt einfach das Bild der: Um die Nutzung dieser Einrichtung UIButton zu dem, was Sie normalerweise in einem UIImageView setzen würden. Zum Beispiel, wenn Sie das tun würde:

myImageView.image = myUIImage 

Sie könnten stattdessen verwenden:

myButton.setImage(myUIImage, forState: UIControlState.Normal) 

So, hier ist was Ihr Code aussehen könnte:

override func viewDidLoad(){ 
    super.viewDidLoad() 

    var myUIImage: UIImage //set the UIImage here 
    myButton.setImage(myUIImage, forState: UIControlState.Normal) 
} 

@IBOutlet var myButton: UIButton! 
@IBAction func buttonTap(sender: UIButton!){ 
    //handle the image tap 
} 

Die große Sache über die Verwendung dieser Wenn Sie das Bild aus einer Datenbank laden müssen, können Sie den Titel der Schaltfläche festlegen, bevor Sie das Bild festlegen:

myButton.setTitle("Loading Image...", forState: UIControlState.Normal) 

Benutzer zu sagen, dass Sie das Bild laden

21

Sie ein UITapGestureRecognizer zum Imageview hinzufügen kann, nur eine in den Storyboard/xib ziehen, Strg-Ziehen aus der Imageview zum GestureRecognizer und Ctrl-Drag vom GestenRecognizer zur Swift-Datei, um eine IBAction zu machen.

Sie werden auch Benutzer-Interaktionen auf den UIImageView aktivieren müssen, wie in diesem Bild gezeigt: enter image description here

+3

'UIImageView' reagiert standardmäßig nicht auf Berührungen. Sie müssen auch Benutzerinteraktionen aktivieren. – rmaddy

+0

@rmaddy Ups, das stimmt. Bearbeitet. – Emil

+1

Benutzerinteraktion aktiviert hat den Trick für mich, danke! – saman0suke

1

Sie ein UIButton mit transparentem Hintergrund über die Oberseite der UIImageView setzen können und hören für einen Wasserhahn auf die Taste vor das Bild

+1

Es ist eine schnelle Möglichkeit, eine Option zu beschreiben. Ich dachte, das wüsste jeder! –

+0

Es ist keine gute Idee, unnötige UI-Komponenten ohne wirklichen Grund hinzuzufügen. Es wird die Komplexität der Benutzeroberfläche erhöhen und Sie müssen mit den gleichen automatischen Layout-Einschränkungen umgehen. Es ist einfach besser, einen TapGestureRecognizer hinzuzufügen. – Gunhan

12

Für schnelle 2.0 Laden und oben tut dies

@IBOutlet weak var imageView: UIImageView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     let tap = UITapGestureRecognizer(target: self, action: #selector(ViewController.tappedMe)) 
     imageView.addGestureRecognizer(tap) 
     imageView.userInteractionEnabled = true 
    } 
    func tappedMe() 
    { 
     print("Tapped on Image") 
    } 
+0

Das funktioniert gut mit swift 3.0. Vielen Dank!! –

+0

userInteractionEnabled wurde jetzt in isUserInteractionEnabled umbenannt –

Verwandte Themen