2015-12-28 1 views
1

У меня самое сложное время, пытаясь выяснить, что не так с моим UITapGestureRecognizer, я поставил точки останова в начале действия и его никогда не вызывают. Я следую примеру, показанному здесь.UITapGestureRecognizer Действие по UIImageView в swift

https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson4.html

И у меня есть UIImageView подключен к водопроводному жесту, как это.

UIImageView Setup И вот у меня есть UITapGestureRecognizer, настроенный таким образом.

UITapGestureRecognizer setup

Наконец мой код является почти точной копией кода из демо.

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. Другое решение - сделать это в коде, как указано в ответе ниже.

+0

imagePhotoControl. userInteractionEnabled = true; установлен в ViewDidLoad –

+0

WHOA ... Это полностью исправлено. Я не понимаю в демо-коде, который не установлен. Почему мое приложение отличается? Также вы могли бы опубликовать это как ответ, и я могу его принять. –

+0

Я добавил ответ и объяснил причину –

ответ

2

// установить в ViewDidLoad

imagePhotoControl.userInteractionEnabled = true ; 
+0

по умолчанию userInterAction изображенияViewView отключен, поскольку изображениеView в основном используется для простого отображения изображений. Вы должны установить его userInterActionEnabled true для получения на нем действий. –