IBAction не регистрирует касание в быстром Xcode - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь настроить кнопку сохранения, чтобы затем вернуться к главному экрану. Проблема в том, что после нажатия кнопки сохранения приложение закрывается с заявлением «Кнопка сохранения не была нажата, отмена». Это выполняется из оператора else, настроенного для активации, когда кнопка не нажата. Тем не менее, она активируется только после того, как я нажму кнопку, поэтому я не понимаю, как это работает, а также как исправить кнопку для фактического сохранения данных при ее нажатии.

Я попытался настроить несколько операторов печати для получения обновлений состояния о сбое, а также попробовать разные способы проверки подлинности нажатия кнопки.

import UIKit
import os.log

class EventViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    var saveButtonPressed: Bool = false;
    //MARK: Properties
    @IBOutlet weak var navItem: UINavigationItem!
    @IBOutlet weak var titleTextField: UITextField!
    @IBOutlet weak var titleNameLabel: UILabel!
    @IBOutlet weak var photoImageView: UIImageView!
    @IBOutlet weak var locationTextField: UITextField!
    @IBOutlet weak var locationNameLabel: UILabel!
    @IBOutlet weak var descriptionTextField: UITextField!
    @IBOutlet weak var descriptionNameLabel: UILabel!
    @IBAction func saveButton(_ sender: Any) {
        saveButtonPressed = true
        print("pressed")
    }


    /*
     This value is either passed by `EventTableViewController` in `prepare(for:sender:)`
     or constructed as part of adding a new event.
     */
    var event: Event?


    override func viewDidLoad() {
        super.viewDidLoad()
        // Handle the text field’s user input through delegate callbacks.
        navItem.title = "New Event"
        titleTextField.delegate = self
        locationTextField.delegate = self
        descriptionTextField.delegate = self

    }
//MARK: UITextFieldDelegate
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        // Hide the keyboard.
        textField.resignFirstResponder()
        return true
    }
    func textFieldDidEndEditing(_ textField: UITextField) {
    }
//MARK: UIImagePickerControllerDelegate
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        // Dismiss the picker if the user canceled.
        dismiss(animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController,
                               didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

        // The info dictionary may contain multiple representations of the image. You want to use the original.
        guard let selectedImage = info[.originalImage] as? UIImage else {
            fatalError("Expected a dictionary containing an image, but was provided the following: \(info)")
        }

        // Set photoImageView to display the selected image.
        photoImageView.image = selectedImage

        // Dismiss the picker.
        dismiss(animated: true, completion: nil)
    }
//MARK: Navigation

    // This method lets you configure a view controller before it's presented.
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        super.prepare(for: segue, sender: sender)
        // Configure the destination view controller only when the save button is pressed.
        if saveButtonPressed == true{
            let title = titleTextField.text ?? ""
            let photo = photoImageView.image
            let location = locationTextField.text
            let description = descriptionTextField.text

            // Set the meal to be passed to MealTableViewController after the unwind segue.
            event = Event(title: title, photo: photo, location: location ?? "", description: description ?? "")
        }
        else {
            os_log("The save button was not pressed, cancelling", log: OSLog.default, type: .debug)
            return
        }

    }

//MARK: Actions

    @IBAction func selectImageFromPhotoLibrary(_ sender: UITapGestureRecognizer) {
        print("touch")
        // Hide the keyboard.
        titleTextField.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
        present(imagePickerController, animated: true, completion: nil)
    }
}

Фактический результат:

2019-01-07 13: 16: 25.547164-0500 Univent2 [24331: 877799] Кнопка сохранения не была нажата, отмена

ожидаемый результат для кнопки сохранения, чтобы сохранить заголовок, изображение, описание и сохранить его как объект для передачи обратно через segue и отображения на контроллере табличного представления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...