UITapGestureRecognizer 未正确触发

Lam*_*ost 1 ios uitapgesturerecognizer swift

我对 iOS 开发相当陌生,我正在遵循 Apple 的应用程序开发教程,所以请耐心等待。我目前正在 XCode 8 上使用 Swift 3 进行开发

\n\n

我在教程中将 UITapGestureRecognizer 连接到情节提要上的图像视图。我已经编写了代码来实现从库中挑选照片并将其放入图像视图的操作。当我运行模拟并单击图像视图时,没有弹出窗口要求应用程序访问照片或任何内容。下面是我写的代码

\n\n
import UIKit\n\nclass ViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {\n\n\n// MARK: Properties\n@IBOutlet weak var mealNameLabel: UILabel!\n@IBOutlet weak var nameTextField: UITextField!\n@IBOutlet weak var photoImageView: UIImageView!\n\n\noverride func viewDidLoad() {\n    super.viewDidLoad()\n    // Do any additional setup after loading the view, typically from a nib.\n\n    //  Handle the text  field\xc2\xb4s user input through delegate callbacks\n    nameTextField.delegate = self\n}\n\n// MARK: UITextFieldDelegate\nfunc textFieldShouldReturn(_ textField: UITextField) -> Bool {\n    // Hide the keyboard.\n    textField.resignFirstResponder()\n    return true\n}\n\nfunc textFieldDidEndEditing(_ textField: UITextField) {\n    mealNameLabel.text = textField.text\n}\n\n// MARK: UIImagePickerControllerDelegate\nfunc imagePickerControllerDidCancel(_ picker: UIImagePickerController) {\n    // Dismiss the picker if the user canceled.\n    dismiss(animated: true, completion: nil)\n}\n\nfunc imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {\n    // The info dictionary contains multiple representations of the image, and this uses the original.\n    let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage\n\n    // Set photoImageView to display the selected image.\n    photoImageView.image = selectedImage\n\n    // Dismiss the picker.\n    dismiss(animated: true, completion: nil)\n}\n\n\n// MARK: Actions\n\n@IBAction func selectImageFromPhotoLibrary(_ sender: UITapGestureRecognizer) {\n    // Hide the keyboard.\n    nameTextField.resignFirstResponder()\n\n    // UIImagePickerController is a view controller that lets a user pick media from their photo library.\n    let imagePickerController = UIImagePickerController()\n\n    // Only allow photos to be picked, not taken.\n    imagePickerController.sourceType = .photoLibrary\n\n    // Make sure ViewController is notified when the user picks an image.\n    imagePickerController.delegate = self\n\n    present(imagePickerController, animated: true, completion: nil)\n}\n\n@IBAction func setDefaultLabelText(_ sender: UIButton) {\n    mealNameLabel.text = "Default Text"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

}

\n\n

这是单击图像视图之前和之后的控制台输出

\n\n
2016-10-25 13:11:05.115607 TestApp1[17930:1007384] subsystem: com.apple.UIKit, category: GestureEnvironment, enable_level: 0, persist_level: 0, default_ttl: 1, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0  \n2016-10-25 13:11:05.116342 TestApp1[17930:1007384] subsystem: com.apple.UIKit, category: GestureExclusion, enable_level: 0, persist_level: 0, default_ttl: 1, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0\n
Run Code Online (Sandbox Code Playgroud)\n\n

根据下面的帖子,我还选择并将“隐私 - 照片库使用说明”键添加到 info.plist 中,但也没有骰子。

\n\n

UIImagePickerController 导致应用程序崩溃 | Swift3、Xcode8

\n\n

如何让照片库弹出?

\n

Raj*_*ari 5

你启用trueisUserInteractionEnabled了吗?

self.photoImageView.isUserInteractionEnabled = true
Run Code Online (Sandbox Code Playgroud)

如果您已将一切设置得很好且公平,那么您可能会错过这一步。还可以使用调试器检查selectImageFromPhotoLibrary函数,当您点击photoImageView.

要通过代码设置点击手势,请将其写入您的ViewController类中。

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(selectImageFromPhotoLibrary))
self.photoImageView.addGestureRecognizer(tapGesture)

func selectImageFromPhotoLibrary(sender:UITapGestureRecognizer) {
    //open photo library code here
}
Run Code Online (Sandbox Code Playgroud)