[英]How to show the data in UITableView when dismissing modal view
我需要幫助。 我的Recipe應用程序有一個主viewController,有兩個UITableView
( ingredientTableView
和directionTableView
)。 每個都是通過'segue'從兩個模態視圖控制器填充。
數據存儲在新配方的成分/方向數組中,但UITableView
在解除模態視圖時不顯示文本。
“保存” 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方法中的標識符檢查相匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.