Как показать данные в UITableView при отклонении модального представления - PullRequest
0 голосов
/ 03 июня 2018

Мне нужна помощь.Приложение My Recipe имеет основной viewController с двумя UITableView (ingredientTableView и directionTableView).Каждый заполняется из двух контроллеров модального представления «segue».

Данные хранятся в массиве ингредиентов / направлений нового рецепта, но UITableView не отображает текст при отклонении модального представления.

This is the UIStoryboard image

Код 'Save' UIBarButton newRecipeController:

    // MARK: - IBActions
extension AddNewRecipeViewController {

    // MARK: - Add Ingredient
    @IBAction func saveIngredient(_ segue: UIStoryboardSegue)
    {
        guard let addIngredientModalViewController = segue.source as? AddIngredientModalViewController,
            let ingredient = addIngredientModalViewController.ingredient else
        {
            return
        }

        // add the new ingredient to the ingredients array
        ingredients.append(ingredient)

        // update the tableview
        let indexPath = IndexPath(row: ingredients.count - 1, section: 0)
        ingredientTableView.insertRows(at: [indexPath], with: .automatic)
    }

    @IBAction func cancelAddIngredient(_ segue: UIStoryboardSegue)
    {
        dismiss(animated: true, completion: nil)
    }

Это подготовка к следующему коду модального вида:

    // MARK: - Segue AddIngredient
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    if segue.identifier == "SaveIngredient",
        let ingredientName = fieldAddNameIngredient.text,
        let ingredientValue = fieldValueOfIngredient.text
    {
        ingredient = IngredientModel(titleIngredientRecipe: ingredientName, subtitleIngredientRecipe: ingredientValue)
    }
}

1 Ответ

0 голосов
/ 03 июня 2018

Нам нужно убедиться, что ваши сегы работают правильно.Вам нужно нажать Ctrl + Drag от кнопки «Добавить» на главном tableViewController к другому контроллеру представления и сделать это «push» переходом.

Затем Ctrl + перетащить с кнопки «Сохранить» наaddNewRecipeViewController к маленькому значку выхода чуть выше контроллера представления.Это позволит вам настроить переход с обратной стороны (который возвращается к контроллеру основного вида).

Теперь вам нужно установить prepareForSegue() в addNewRecipeViewController, который готовит данные для отправки обратно,затем настройте функцию sewwwing в главном tableViewController для получения данных, обновите массив данными и перезагрузите tableView.

Сначала в addNewRecipeViewController.То, что у вас есть, должно работать.Важно то, что вы устанавливаете переменную контроллера представления «ингридиент», поскольку затем ее можно передать обратно первому контроллеру представления.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "SaveIngredient",
        let ingredientName = fieldAddNameIngredient.text,
        let ingredientValue = fieldValueOfIngredient.text
    {
        ingredient = IngredientModel(titleIngredientRecipe: ingredientName, subtitleIngredientRecipe: ingredientValue)
    }
}

Затем в главном tableViewController мы пишем функцию, котораяполучит данные из сеанса раскрутки.

@IBAction func unwind(sender: UIStoryboardSegue) {
    if let sourceViewController = sender.source as? AddNewIngredientViewController, let ingredient = sourceViewController.ingredient {
        // Now ingredient holds the new data, so use it as you wish. This is an example:
        myIngredients.append(ingredient)
        tableView.reloadData()
    }
}

Таким образом, вы можете передать все необходимые данные обратно в исходный tableViewController.Я не совсем уверен, как настроены ваши пользовательские классы (Ingredient, Recipe и т. Д.), Но пока второй контроллер представления (ввода данных) имеет переменную правильного типа для хранения данных, к нему можно получить доступ следующим образом:первый (главный) контроллер представления.

Вот учебник по передаче данных в процессе раскрутки.


Обновление:

IПосмотрели исходный код - проблема не заключалась в предоставлении идентификатора раскрутки в Storyboard.Также было несколько небольших изменений в коде делегата tableView (проверка идентичности tableView с === вместо ==).

На рисунке ниже показано, где предоставить этот идентификатор - это должно соответствовать проверке идентификаторав методе раскрутки.

Unwind segue at bottom of scene in Storyboard

Identifier for unwind segues

...