簡體   English   中英

如何在解除模態視圖時在UITableView中顯示數據

[英]How to show the data in UITableView when dismissing modal view

我需要幫助。 我的Recipe應用程序有一個主viewController,有兩個UITableViewingredientTableViewdirectionTableView )。 每個都是通過'segue'從兩個模態視圖控制器填充。

數據存儲在新配方的成分/方向數組中,但UITableView在解除模態視圖時不顯示文本。

這是UIStoryboard圖像

“保存” 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)
    }

這是為模態視圖的segue代碼做准備:

    // 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)
    }
}

我們需要確保您的segues正常工作。 你需要從主tableViewController的“添加”按鈕ctrl +拖動到另一個視圖控制器,並使其成為“推”segue。

然后,按住Ctrl +從addNewRecipeViewController上的“save”按鈕addNewRecipeViewController到視圖控制器正上方的小出口圖標。 這將允許您設置展開segue(回滾到主視圖控制器)。

現在你需要在addNewRecipeViewController設置prepareForSegue() ,它准備好發送回數據,然后在主tableViewController設置一個展開segue函數來接收數據,用數據更新你的數組並重新加載tableView

首先,在addNewRecipeViewController 你有什么應該工作。 重要的是你設置視圖控制器變量'ingredient`,然后可以將其傳遞回第一個視圖控制器。

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我們編寫將從unwind segue接收數據的函數。

@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 我不太確定你的自定義類是如何設置的(成分,配方等),但只要第二個(數據輸入)視圖控制器有一個正確類型的變量來存儲數據,就可以像這樣訪問它第一個(主)視圖控制器。

這是一個關於在展開segue中傳遞數據的教程


更新:

我查看了源代碼 - 問題是沒有在Storyboard身份檢查器中提供展開segue標識符。 tableView委托代碼也有一些小的改動(用===而不是==檢查tableView標識)。

下圖顯示了提供此標識符的位置 - 這需要與unwind方法中的標識符檢查相匹配。

在Storyboard中放松場景底部的segue

放松segues的標識符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM