Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 3中的手势有什么不同?_Swift_Uitapgesturerecognizer - Fatal编程技术网

Swift 3中的手势有什么不同?

Swift 3中的手势有什么不同?,swift,uitapgesturerecognizer,Swift,Uitapgesturerecognizer,我不知道为什么我的代码不起作用: let profileImageView: UIImageView = { let image = UIImageView() image.image = UIImage(named: "gameofthrones_splash") image.translatesAutoresizingMaskIntoConstraints = false image.contentMode = .scaleAspectFill let

我不知道为什么我的代码不起作用:

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中(我可以看到它)


但当我点击控制台时,控制台中没有返回任何内容!WTF?

好的,解决方案其实很简单。您必须使其成为一个懒惰的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
}()

好的,解决办法其实很简单。您必须使其成为一个懒惰的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
}()

它在靶子里。当放置在viewDidLoad()中时,此选项起作用:


目标是“self”,即UIViewController(不是UIImageView)。在大多数情况下(我确信存在异常值),您希望在视图中记录手势,但在视图控制器中使用该手势。

它在目标中。当放置在viewDidLoad()中时,此选项起作用:

目标是“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")
    }
只是为了测试我删除的图像,你可以添加它。但它工作得很好。

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

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

尝试保留imageView。实例可能会被释放。全局初始化图像并向其添加手势。您的意思是什么?让image=UIImageView()将其放在其他位置,例如viewDidLoad并在此方法中使用image变量尝试保留imageView。实例可能会被释放。全局初始化图像并向其添加手势。你的意思是什么?让image=UIImageView()将其放在其他位置,例如viewDidLoad并在该方法中使用图像变量否,但我只需要添加一个惰性…它是固定的。否,但我只需添加一个惰性…它是固定的。