[英]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.