Swift 3 中的 AddGesture 不同?

AddGesture different 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
}()

这个imageView是在ViewDidLoad中加载的(我能看到)

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

但是当我点击它时,控制台中没有返回任何内容!什么鬼?

好的,实际上解决方案非常简单。您必须将其设为惰性变量而不是 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
}()

它在目标中。这在放置在 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)

目标是"self",也就是UIViewController(不是UIImageView)。在大多数情况下(我确定有异常值)你想在视图中记录手势,但在视图控制器中使用手势。

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

只是为了测试我删除了图片,你可以添加它。但它工作正常。

我使用 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")
}