簡體   English   中英

向任何視圖添加點擊手勢不會觸發任何操作

[英]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

渲染視圖: ProfileViewController 查看層次結構 視圖層次結構 可能不需要的額外信息: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM