我正在处理iOS开发过程中迄今为止最令人沮丧的问题。我原本是试图添加一个手势识别器到我的UIImage
视图,但没有任何运气。我在堆栈上进行了一些搜索,发现我没有设置imageView.isUserInteractionEnabled = true
,我认为它可以解决我的问题,但它没有。于是我开始为所有的东西添加手势识别器,包括imageView
的父视图,但仍然没有任何东西。我确信我正在做/未做过的事情非常简单,但我完全错过了它。请帮忙。在任何视图中添加点击手势什么也不触发
ProfileViewController: UIViewController {
// User's info container (Parent iof imageView)
let userInfoContainer: UIView = {
let head = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
head.backgroundColor = UIColor.white
head.translatesAutoresizingMaskIntoConstraints = false
head.layer.borderWidth = 1
print(head.isUserInteractionEnabled) // Returns true
let tap = UITapGestureRecognizer(target: self, action: #selector(tapped))
head.addGestureRecognizer(tap)
return head
}()
// Users name
let userName: UITextField = {
let name = UITextField()
name.text = "John Doe"
name.translatesAutoresizingMaskIntoConstraints = false
name.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: #selector(tapped))
name.addGestureRecognizer(tap)
return name
}()
// User's profile image
let profileImageView: UIImageView = {
let imageView = UIImageView(image: #imageLiteral(resourceName: "avatar"))
imageView.layer.cornerRadius = 50
imageView.layer.masksToBounds = true
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.isUserInteractionEnabled = true
imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapped)))
return imageView
}()
//
//
// skipping other UI elements
//
//
override func viewDidLoad() {
super.viewDidLoad()
// Authentication bits
self.title = "Profile View"
self.view.backgroundColor = UIColor.white
self.view.addSubview(userInfoContainer)
self.view.addSubview(profileImageView)
self.view.addSubview(userName)
} // end viewDidLoad
func tapped() {
print(123)
}
// setup constraints
func setupUserInfoContainer() {
userInfoContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
userInfoContainer.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
userInfoContainer.heightAnchor.constraint(equalToConstant: 200).isActive = true
}
// profile image arrangement
func setupProfileImage() {
profileImageView.leftAnchor.constraint(equalTo: userInfoContainer.leftAnchor, constant: 20).isActive = true
profileImageView.centerYAnchor.constraint(equalTo: userInfoContainer.centerYAnchor).isActive = true
profileImageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
profileImageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
}
func setupLabels() {
userName.leftAnchor.constraint(equalTo: profileImageView.rightAnchor, constant: 20).isActive = true
userName.centerYAnchor.constraint(equalTo: profileImageView.centerYAnchor).isActive = true
userName.heightAnchor.constraint(equalToConstant: 20).isActive = true
userName.isEnabled = false
}
} // end view controller
渲染视图: 视图层次 额外的信息,这些信息可能不必要:ProfileViewController正在被处理的UITabBarController但是从我所看到的,这不应该有所作为。
更新 环视它看起来像适当的迅速3语法 let tap = UITapGestureRecognizer(target: self, action: #selector(self.tapped(_:)))
,但我认为有在封闭该行是什么导致抛出../ProfileViewController.swift:37:74: Value of type '(NSObject) ->() -> ProfileViewController' has no member 'tapped'
此错误。如果有人可以解释我是怎么可以解决这将是恒星。
你可以尝试改变点击的签名点击(_发件人:任何),并改变它在选择器点击(_ :)? – Connor
我更改了签名,但仍收到上面列出的错误。 @ConnorG –
检查用户交互是否启用了viewcontoller的视图 – Tiko