it-swarm.com.de

Zuweisen einer Aktion für das UIImageView-Objekt in Swift

Ich versuche, einer Aktion eine UIImageView zuzuweisen, wenn der Benutzer darauf tippt.

Ich weiß, wie man eine Aktion für eine UIButton erstellt, aber wie kann ich dasselbe Verhalten einer UIButton nachahmen, aber eine UIImageView verwenden?

150
user3706773

Sie benötigen eine UITapGestureRecognizer. Zum Einrichten verwenden Sie Folgendes:

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 ein UIButton verwenden und ihm ein Bild ohne Text zuweisen und dann einfach eine IBAction anschließen.)

339
Aseider

Sie müssen einen Gestenerkenner hinzufügen (Zum Antippen verwenden Sie UITapGestureRecognizer ; zum Tippen und Halten verwenden Sie UILongPressGestureRecognizer ) zu Ihrer UIImageView.

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

Und implementiere die Auswahlmethode wie:

@objc func tappedMe()
{
    println("Tapped on Image")
}
59
Midhun MP

Sie können der imageView eine UITapGestureRecognizer hinzufügen, indem Sie sie einfach in Ihr Storyboard/Xib ziehen, die Strg-Taste von der imageView zur GestureRecognizer ziehen und die Strg-Taste von der GestureRecognizer zur Swift-Datei ziehen, um eine IBAction zu erstellen.

Sie müssen außerdem Benutzerinteraktionen für die Variable UIImageView aktivieren, wie in der folgenden Abbildung dargestellt: enter image description here

32
Emil

Für Swift 2.0 und höher ist dies möglich

@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")
    }
13
Abhishek Kumar

Sie können das Image der Variable UIButton tatsächlich auf das setzen, was Sie normalerweise in einer Variable UIImageView eingeben würden. Zum Beispiel, wo würden Sie tun:

myImageView.image = myUIImage

Sie könnten stattdessen verwenden:

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

So könnte Ihr Code aussehen:

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
}

Das Tolle an dieser Methode ist, dass Sie, wenn Sie das Bild aus einer Datenbank laden müssen, den Titel der Schaltfläche festlegen können, bevor Sie das Bild festlegen:

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

Um Ihren Benutzern mitzuteilen, dass Sie das Bild laden

8
Jojodmo

Swift4-Code

Probieren Sie diese neuen Erweiterungsmethoden aus:

import UIKit

extension UIView {

    fileprivate struct AssociatedObjectKeys {
        static var tapGestureRecognizer = "MediaViewerAssociatedObjectKey_mediaViewer"
    }

    fileprivate typealias Action = (() -> Void)?


    fileprivate var tapGestureRecognizerAction: Action? {
        set {
            if let newValue = newValue {
                // Computed properties get stored as associated objects
                objc_setAssociatedObject(self, &AssociatedObjectKeys.tapGestureRecognizer, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
            }
        }
        get {
            let tapGestureRecognizerActionInstance = objc_getAssociatedObject(self, &AssociatedObjectKeys.tapGestureRecognizer) as? Action
            return tapGestureRecognizerActionInstance
        }
    }


    public func addTapGestureRecognizer(action: (() -> Void)?) {
        self.isUserInteractionEnabled = true
        self.tapGestureRecognizerAction = action
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture))
        self.addGestureRecognizer(tapGestureRecognizer)
    }


    @objc fileprivate func handleTapGesture(sender: UITapGestureRecognizer) {
        if let action = self.tapGestureRecognizerAction {
            action?()
        } else {
            print("no action")
        }
    }

}

Wann immer wir eine UITapGestureRecognizer zu einer UIView- oder UIView-Unterklasse wie UIImageView hinzufügen möchten, können wir dies tun, ohne dazu zugehörige Funktionen für Selektoren zu erstellen!

Verwendungszweck:

 profile_ImageView.addTapGestureRecognizer {
        print("image tapped")
    }
6
Ravindra Bhati

Sie können eine UIButton mit einem transparenten Hintergrund über die UIImageView setzen und vor dem Laden des Bildes nach einem Tippen auf die Schaltfläche warten

1
depsch ali

Ich schlage vor, die Schaltfläche unsichtbar (Deckkraft = 0) in Ihrer Bildansicht zu platzieren und dann die Interaktion mit der Schaltfläche zu handhaben.

0
levan

Swift 4 Code


Schritt 1 in ViewdidLoad ()

   let pictureTap = UITapGestureRecognizer(target: self, action: #selector(MyInfoTableViewController.imageTapped))
       userImageView.addGestureRecognizer(pictureTap)
       userImageView.isUserInteractionEnabled = true

Schritt 2 Fügen Sie folgende Funktion hinzu

@objc func imageTapped() {

        let imageView = userImageView
        let newImageView = UIImageView(image: imageView?.image)
        newImageView.frame = UIScreen.main.bounds
        newImageView.backgroundColor = UIColor.black
        newImageView.contentMode = .scaleAspectFit
        newImageView.isUserInteractionEnabled = true
        let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
        newImageView.addGestureRecognizer(tap)
        self.view.addSubview(newImageView)

        self.navigationController?.isNavigationBarHidden = true
        self.tabBarController?.tabBar.isHidden = true

    }

Es wurde getestet und funktioniert einwandfrei

0
Sachin Rasane