2016-01-25 3 views
2

Я медленно работаю над тем, чтобы научиться разрабатывать Apple для Swift, и я постоянно сталкиваюсь с проблемой с моим жестом касания. Я снова создал номера проектов с одинаковым результатом.iOS - Проблема с нажатием кнопки «Жест» при просмотре изображения

Я добавляю жест отображения к изображению, и это должно открыть библиотеку фотографий с моего компьютера. Ничего не произошло.

Когда я загружаю и запускаю образец файла из Apple, все работает. Когда я копирую и вставляю код из Apple в мой, опять же ничего не происходит. Я пережил все, что мог, но чувствую, что я чего-то не хватает.

Вот мой код. код от Apple ниже:

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    // MARK: Properties 
    @IBOutlet weak var nameTextField: UITextField! 
    @IBOutlet weak var mealNameLabel: UILabel! 
    @IBOutlet weak var photoImageView: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // handle the text fields user input through delegate callbacks 
     nameTextField.delegate = self 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // MARK: UITextFieldDelegate 
    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     // Hide the Keyboard 
     textField.resignFirstResponder() 
     return true 

    } 
    func textFieldDidEndEditing(textField: UITextField) { 
     mealNameLabel.text = textField.text 
    } 

    // MARK: UIImagePickerControllerDelegate 

    func imagePickerControllerDidCancel(picker: UIImagePickerController) { 
     // dismiss the picker if user cancels 
     dismissViewControllerAnimated(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 the photoviewimage to be the selected image 
     photoImageView.image = selectedImage 

     // Dismiss the picker 
     dismissViewControllerAnimated(true, completion: nil) 
    } 

    // MARK: Actions 

    @IBAction func selectImageFromPhotoLibrary(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 pictures to be selected and not taken 
     imagePickerController.sourceType = .PhotoLibrary 

     // make sure the viewcontroller is notified when the user selects an image 
     imagePickerController.delegate = self 

     presentViewController(imagePickerController, animated: true, completion: nil) 

    } 

    @IBAction func setDefaultLabelText(sender: UIButton) { 
     mealNameLabel.text = "Default Text" 
    } 

} 

Вот код от Apple:

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    // MARK: Properties 

    @IBOutlet weak var nameTextField: UITextField! 
    @IBOutlet weak var mealNameLabel: UILabel! 
    @IBOutlet weak var photoImageView: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Handle the text field’s user input through delegate callbacks. 
     nameTextField.delegate = self 
    } 

    // MARK: UITextFieldDelegate 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     // Hide the keyboard. 
     textField.resignFirstResponder() 
     return true 
    } 

    func textFieldDidEndEditing(textField: UITextField) { 
     mealNameLabel.text = textField.text 
    } 

    // MARK: UIImagePickerControllerDelegate 
    func imagePickerControllerDidCancel(picker: UIImagePickerController) { 
     // Dismiss the picker if the user canceled. 
     dismissViewControllerAnimated(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. 
     photoImageView.image = selectedImage 

     // Dismiss the picker. 
     dismissViewControllerAnimated(true, completion: nil) 
    } 

    // MARK: Actions 
    @IBAction func selectImageFromPhotoLibrary(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) 
    } 

    @IBAction func setDefaultLabelText(sender: UIButton) { 
     mealNameLabel.text = "Default Text" 
    } 

} 

Рабочий код из Anbu

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 


    // MARK: Properties 
    @IBOutlet weak var nameTextField: UITextField! 
    @IBOutlet weak var mealNameLabel: UILabel! 
    @IBOutlet weak var photoImageView: UIImageView! 



    override func viewDidLoad() { 
     let tapgesture = UITapGestureRecognizer(target: self, action: Selector("imagepressed")) 
     photoImageView.userInteractionEnabled = true 
     photoImageView.addGestureRecognizer(tapgesture) 

     super.viewDidLoad() 

     // handle the text fields user input through delegate callbacks 
     nameTextField.delegate = self 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // MARK: UITextFieldDelegate 
    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     // Hide the Keyboard 
     textField.resignFirstResponder() 
     return true 

    } 
    func textFieldDidEndEditing(textField: UITextField) { 
     mealNameLabel.text = textField.text 
    } 

    // MARK: UIImagePickerControllerDelegate 

    func imagePickerControllerDidCancel(picker: UIImagePickerController) { 
     // dismiss the picker if user cancels 
     dismissViewControllerAnimated(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 the photoviewimage to be the selected image 
     photoImageView.image = selectedImage 

     // Dismiss the picker 
     dismissViewControllerAnimated(true, completion: nil) 
    } 

    // MARK: Actions 


    func imagepressed() { 
     nameTextField.resignFirstResponder() 

     // UIImagePickerController is a view controller that lets a user pick media from their photo library. 
     let imagePickerController = UIImagePickerController() 

     // Only Allow pictures to be selected and not taken 
     imagePickerController.sourceType = .PhotoLibrary 

     // make sure the viewcontroller is notified when the user selects an image 
     imagePickerController.delegate = self 

     presentViewController(imagePickerController, animated: true, completion: nil) 
    } 



/* @IBAction func selectImageFromPhotoLibrary(sender: UITapGestureRecognizer) { 
     let tapgesture = UITapGestureRecognizer(target: self, action: Selector("imagepressed")) 
     photoImageView.userInteractionEnabled = true 
     photoImageView.addGestureRecognizer(tapgesture) 

     // 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 pictures to be selected and not taken 
     imagePickerController.sourceType = .PhotoLibrary 

     // make sure the viewcontroller is notified when the user selects an image 
     imagePickerController.delegate = self 

     presentViewController(imagePickerController, animated: true, completion: nil) 

    } 
    */ 

    @IBAction func setDefaultLabelText(sender: UIButton) { 
     mealNameLabel.text = "Default Text" 
    } 

} 
+1

Где распознаватель жестов? – matt

+0

Вы добавили распознаватель таргетинга в раскадровку/XIB для своего монитора управления? Если вы не добавили распознаватель жестов к раскадровке/xib, а затем подключите метод действия к selectImageFromPhotoLibrary. – iamyogish

+0

жест выделения был добавлен в Раскадровка на ImageView, а затем связан с помощью перетаскивания под // Mark: Действия с UITapGesture –

ответ

3

сделать как

Причина, по умолчанию UIImageView userInteraction - false, поэтому вам необходимо включить вручную

Шаг-1

let tapGesture = UITapGestureRecognizer(target:self, action:Selector("imagePressed")) 
photoImageView.userInteractionEnabled = true // this line is important 
photoImageView.addGestureRecognizer(tapGesture) 

Шаг-2

func imagePressed() 
{ 
//do Your action here whatever you want 
} 
+0

Где я могу добавить это? И это то, о чем я думал (по этим направлениям, по крайней мере, так как я не хочу отдавать себе большой кредит), но разработчик Apple ничего не показывает. –

+0

on viewdidload call this –

+0

Andu, я попробовал несколько разных мест, чтобы поставить код без успеха. Не стесняйтесь обращаться со мной, как с моим двухлетним сыном, и дайте мне знать, куда положить код. Кроме того, я бы просто скопировать и вставить код, который находится под фондом selectuserimagefromlibrary, и вставить его в func imagepressed()? –

0

Где вы добавили UITapGestureRecognizer для представления изображения? Если вы добавили его в Storyboard, подключили ли вы его к селектору selectImageFromPhotoLibrary:?

+0

жестом кран был добавлен в Раскадровка на ImageView, а затем подключен путем перетаскивания под // Mark: Действия с UITapGesture –

5

Самый простой способ, по которому я решил, что решить проблему, - это щелкнуть пометку «Включение взаимодействия с пользователем» в редакторе атрибутов для представления изображения. Screenshot

+0

По существу, эта ошибка возникает из-за отсутствия инструкции № 12 в разделе «Добавить фотографию для еды»: «В инспекторе атрибутов найдите поле« Взаимодействие »и установите флажок« Взаимодействие с пользователем ». Вам понадобится эта функция позже, чтобы пользователи могли взаимодействовать с изображением». – ToneDaBass

+0

Перед подключением контроллера Tap Gesture Recognizer к контроллеру «Image View» вы должны проверить истинное «взаимодействие с пользователем». –

0

Ваш код в порядке. Проблема заключается в UIImageView.

По умолчанию, когда вы добавляете UIImageView в панель рассказов, опция «пользовательское взаимодействие» не установлена.

Так что вам просто нужно включить этот вариант в раскадровке.

  1. Перейти к описанию.

  2. Выберите UIImageView (вы назвали его photoimageview)

  3. В настоящее время в «Attribute Inspector» ищет «взаимодействия пользователя с поддержкой» под "взаимодействие", оно должно быть «проверено»

  4. сейчас запустите свой проект, он будет работать.