Я пытаюсь настроить кнопку сохранения, чтобы затем вернуться к главному экрану. Проблема в том, что после нажатия кнопки сохранения приложение закрывается с заявлением «Кнопка сохранения не была нажата, отмена». Это выполняется из оператора 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 и отображения на контроллере табличного представления