2016-11-20 6 views
0

Ich habe keine Ahnung, warum mein Code nicht funktioniert:AddGesture anders in Swift 3?

let profileImageView: UIImageView = { 
    let image = UIImageView() 
    image.image = UIImage(named: "gameofthrones_splash") 
    image.translatesAutoresizingMaskIntoConstraints = false 
    image.contentMode = .scaleAspectFill 
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)) 
    image.addGestureRecognizer(tapGesture) 
    image.isUserInteractionEnabled = true 

    return image 
}() 

Diese Imageview im ViewDidLoad geladen ist (ich kann es sehen)

func handleSelectProfileImageView() { 
    print("123") 
} 

Aber nichts in der Konsole zurückgegeben werden, wenn ich tippe drauf! WTF?

+0

Versuchen Sie, die Imageview zu behalten. Die Instanz wird möglicherweise veröffentlicht. Initialisieren Sie das Bild global und fügen Sie die Geste hinzu. – Gyanendra

+0

was meinst du? – petaire

+0

Lassen Sie Image = UIImageView() legte es woanders wie viewDidLoad und Bildvariable in dieser Methode verwenden – Gyanendra

Antwort

1

Es ist im Ziel. Dies funktioniert, wenn Platz im viewDidLoad():

profileImageView.frame = CGRect(x: 60, y: 60, width: 70, height: 70) 
view.addSubview(profileImageView) 
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)) 
profileImageView.addGestureRecognizer(tapGesture) 

Das Ziel ist "Selbst", das ist die UIViewController (nicht die UIImageView). In den meisten Fällen (ich bin mir sicher, dass es Ausreißer gibt) möchten Sie eine Geste in einer Ansicht aufzeichnen, arbeiten aber mit der Geste in einem Ansichts-Controller.

+0

Nein, aber ich musste nur eine faule hinzufügen ... Es ist behoben. – petaire

1

Okay, die Lösung war eigentlich ganz einfach. Du musst es zu einem faulen Var machen anstatt zu einem Let.

lazy var profileImageView: UIImageView = { 
    let image = UIImageView() 
    image.image = UIImage(named: "gameofthrones_splash") 
    image.translatesAutoresizingMaskIntoConstraints = false 
    image.contentMode = .scaleAspectFill 
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)) 
    image.addGestureRecognizer(tapGesture) 
    image.isUserInteractionEnabled = true 

return image 
}() 
0

Swift 3.0: Es gibt einige Fehler war ich es entfernt - Diesen Code in viewDidLoad

override func viewDidLoad() { 
     super.viewDidLoad() 

     var profileImageView:UIImageView { 
      var image = UIImageView() 
      image.backgroundColor = UIColor.red; 
      image.frame = CGRect(x: 0, y: 0, width: 44, height: 44) 
      image.translatesAutoresizingMaskIntoConstraints = false 
      image.contentMode = .scaleAspectFill 
      let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)) 
      image.addGestureRecognizer(tapGesture) 
      image.isUserInteractionEnabled = true 

      return image 
     } 

     view.addSubview(profileImageView); 


     // Do any additional setup after loading the view. 
    } 

func handleSelectProfileImageView() { 
     print("123") 
    } 

Nur um zu testen ich das Bild entfernt, können Sie es hinzufügen. Aber es funktioniert gut.

0

Ich reparierte dieses Problem eine UIButton mit ->

let profileImageView: UIButton = { 
    let iv = UIButton() 
    let image = UIImage(named: "r2d2") 
    iv.setImage(image, for: .normal) 
    iv.translatesAutoresizingMaskIntoConstraints = false 
    iv.addTarget(self, action: #selector(selectProfileImage), for: .touchUpInside) 
    iv.isUserInteractionEnabled = true 
    return iv 
}() 

@objc func selectProfileImage(){ 
    print("Hello") 
}