[英]Adding Tap Gesture to any view triggers nothing
到目前為止,我正在處理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
渲染視圖: 查看層次結構
可能不需要的額外信息:UITabBarController正在處理ProfileViewController,但是從我所看到的來看,這沒有什么區別。
從環顧四周更新看起來像是適當的swift 3語法, let tap = UITapGestureRecognizer(target: self, action: #selector(self.tapped(_:)))
但我認為關閉中的那一行是導致此錯誤的原因被拋出../ProfileViewController.swift:37:74: Value of type '(NSObject) -> () -> ProfileViewController' has no member 'tapped'
如果有人可以解釋我如何解決這個問題,那將是出色的。
我不相信您可以通過這種方式分配手勢識別器...
1 let profileImageView: UIImageView = {
2 let imageView = UIImageView(image: #imageLiteral(resourceName: "avatar"))
3 imageView.layer.cornerRadius = 50
4 imageView.layer.masksToBounds = true
5 imageView.translatesAutoresizingMaskIntoConstraints = false
6 imageView.isUserInteractionEnabled = true
7 imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapped)))
8 return imageView
9 }()
在第7行, self
什么? 它是返回UIImageView
的函數 。
您的func tapped()
不屬於該函數...它屬於ProfileViewController
。
您也許可以找到改變目標的方法,但是嘗試不同方法的幾分鍾沒有給我帶來任何運氣。
我認為您需要在ProfileViewController / viewDidLoad()
(或該類中的其他位置)內部創建並添加GestureRecognizer。
問題是您沒有將委托設置為輕擊手勢。 檢查一下
希望這會起作用
您為什么不像在班級頂部那樣初始化圖像視圖
let profileImageView = UIImageView()
並創建一個功能來配置imageview並將其添加為子視圖,例如在view中加載。 那應該工作
func configureImageView() {
#add methods and customize image view
#add image view to sub view
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.