关闭模态视图时如何在 UITableView 中显示数据
How to show the data in UITableView when dismissing modal view
我需要帮助。我的 Recipe 应用有一个主 viewController 和两个 UITableView
(ingredientTableView
和 directionTableView
)。每个都由 'segue'.
从两个模态视图控制器填充
数据存储在新配方的 ingredient/direction 数组中,但 UITableView
关闭模态视图时不显示文本。
'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)
}
这是模态视图的 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)
}
}
我们需要确保您的转场工作正常。您需要从主 tableViewController
的 "add" 按钮按住 ctrl 并拖动到另一个视图控制器,并将其设为 "push" segue。
然后,按住 ctrl 并从 addNewRecipeViewController
上的 "save" 按钮拖动到视图控制器正上方的小退出图标。这将允许您设置一个 unwind segue(回滚到主视图控制器)。
现在你需要在 addNewRecipeViewController
中设置 prepareForSegue()
来准备发送数据,然后在主 tableViewController
中设置一个 unwind 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
。我不太确定你的自定义 类 是如何设置的(成分、配方等),但只要第二个(数据输入)视图控制器有一个正确类型的变量来存储数据,它就可以在第一个(主)视图控制器中这样访问。
这里是 tutorial 关于在 unwind segue 中传递数据的。
更新:
我查看了源代码 - 问题是没有在 Storyboard identity inspector 中提供 unwind segue 标识符。 tableView 委托代码也有一些小改动(使用 ===
而不是 ==
检查 tableView 身份)。
下图显示了提供此标识符的位置 - 这需要与展开方法中的标识符检查相匹配。
我需要帮助。我的 Recipe 应用有一个主 viewController 和两个 UITableView
(ingredientTableView
和 directionTableView
)。每个都由 'segue'.
数据存储在新配方的 ingredient/direction 数组中,但 UITableView
关闭模态视图时不显示文本。
'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)
}
这是模态视图的 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)
}
}
我们需要确保您的转场工作正常。您需要从主 tableViewController
的 "add" 按钮按住 ctrl 并拖动到另一个视图控制器,并将其设为 "push" segue。
然后,按住 ctrl 并从 addNewRecipeViewController
上的 "save" 按钮拖动到视图控制器正上方的小退出图标。这将允许您设置一个 unwind segue(回滚到主视图控制器)。
现在你需要在 addNewRecipeViewController
中设置 prepareForSegue()
来准备发送数据,然后在主 tableViewController
中设置一个 unwind 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
。我不太确定你的自定义 类 是如何设置的(成分、配方等),但只要第二个(数据输入)视图控制器有一个正确类型的变量来存储数据,它就可以在第一个(主)视图控制器中这样访问。
这里是 tutorial 关于在 unwind segue 中传递数据的。
更新:
我查看了源代码 - 问题是没有在 Storyboard identity inspector 中提供 unwind segue 标识符。 tableView 委托代码也有一些小改动(使用 ===
而不是 ==
检查 tableView 身份)。
下图显示了提供此标识符的位置 - 这需要与展开方法中的标识符检查相匹配。