2016-11-20 4 views
0

Я понятия не имею, почему мой код не работает:AddGesture другой в 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 
}() 

Это ImageView загружается в ViewDidLoad (я могу видеть)

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

Но ничего получить вернулся в консоли, когда я Я нажимаю на него! WTF?

+0

Try, чтобы сохранить ImageView. Экземпляры могут быть освобождены. Инициализируйте изображение по всему миру и добавьте к нему жест. – Gyanendra

+0

Что значит? – petaire

+0

let image = UIImageView() поместить его где-нибудь еще, например viewDidLoad, и использовать переменную изображения внутри этого метода – Gyanendra

ответ

1

Это цели. Это работает, когда место в 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) 

Целью является "я", который является UIViewController (не UIImageView). В большинстве случаев (я уверен, что есть выбросы) вы хотите записать жест в представлении, но работайте с жестом в контроллере представления.

+0

Нет, но я просто должен был добавить ленивый ... Это исправлено. – petaire

1

Хорошо, на самом деле решение было довольно простым. Вы должны сделать это ленивым var вместо 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: Существовал некоторые ошибки я удалил его - Поместите этот код в 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") 
    } 

Просто, чтобы проверить я удалил изображение, вы можете добавить его. Но он работает нормально.

0

Я исправил эту проблему, используя UIButton ->

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") 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^