У меня самое сложное время, пытаясь выяснить, что не так с моим UITapGestureRecognizer, я поставил точки останова в начале действия и его никогда не вызывают. Я следую примеру, показанному здесь.UITapGestureRecognizer Действие по UIImageView в swift
И у меня есть UIImageView подключен к водопроводному жесту, как это.
И вот у меня есть UITapGestureRecognizer, настроенный таким образом.
Наконец мой код является почти точной копией кода из демо.
import UIKit
class ViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate{
//MARK: Properties
@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var mealNameLabel: UILabel!
@IBOutlet weak var imagePhotoControl: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
nameTextField.delegate = self;
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//MARK: UITextFieldDelegate
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder();
return true;
}
func textFieldDidEndEditing(textField: UITextField) {
mealNameLabel.text = textField.text;
}
func imagePickerControllerDidCancel(picker: UIImagePickerController) {
// Dismiss the picker if the user canceled.
dismissViewControllerAnimated(true, completion: nil)
}
// MARK: Actions
@IBAction func selectImageFromLibraryAlso(sender: UITapGestureRecognizer) {
// Hide the keyboard.
nameTextField.resignFirstResponder()
// UIImagePickerController is a view controller that lets a user pick media from their photo library.
let imagePickerController = UIImagePickerController()
// Only allow photos to be picked, not taken.
imagePickerController.sourceType = .PhotoLibrary
// Make sure ViewController is notified when the user picks an image.
imagePickerController.delegate = self
presentViewController(imagePickerController, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
// The info dictionary contains multiple representations of the image, and this uses the original.
let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage
// Set photoImageView to display the selected image.
imagePhotoControl.image = selectedImage
// Dismiss the picker.
dismissViewControllerAnimated(true, completion: nil)
}
@IBAction func setDefaultLabelText(sender: UIButton) {
mealNameLabel.text = "Default Text"
}
}
Я просто не понимаю, почему действие никогда не загорится, когда я коснусь изображения. Я даже загрузил демо-код, и это работает по назначению. Я назвал мой проект Food Tracker пространством, может быть, проблема? Я в основном сводил меня с ума, пытаясь понять, почему это событие не уволили. Я готов сделать папку diff между моим проектом и демонстрационным проектом.
ANSWER CONT .: Так получилось, что в UIImageView есть флажок в инспекторе атрибутов с именем User Interaction Enabled. Если вы проверите это, это позволит касатьться событиям из вашего UITapGestureRecognizer. Другое решение - сделать это в коде, как указано в ответе ниже.
imagePhotoControl. userInteractionEnabled = true; установлен в ViewDidLoad –
WHOA ... Это полностью исправлено. Я не понимаю в демо-коде, который не установлен. Почему мое приложение отличается? Также вы могли бы опубликовать это как ответ, и я могу его принять. –
Я добавил ответ и объяснил причину –