如何准备 segue 在我的 TableViewController 中加载不同的数组?
Posted
技术标签:
【中文标题】如何准备 segue 在我的 TableViewController 中加载不同的数组?【英文标题】:How do I prepare for segue to load different arrays in my TableViewController? 【发布时间】:2016-03-30 13:10:51 【问题描述】:经过几天的挣扎,我不知道如何解决这个问题。我正在制作一个简单的餐厅应用程序。 foodMenuController
包含 2 个按钮,它们必须将不同的菜单数组加载到 tableViewController
(午餐、早餐)中。为了定义应该加载的菜单,有人告诉我使用variable -> contentMode
。
在我的TableViewController
中,我将contentMode
设置为"0"
。在我的foodMenuController
中,我使用了为segue 准备的标识符,将contentMode
设置为1
(早餐)和2
(午餐)。
现在的问题是我的表不知道它何时处于 contentMode 1 或 2,也不知道在何处以及如何编写代码来指示表在某个 contentMode 时加载不同的数组。我希望有人可以帮助我解决我在下面发布的代码。
import UIKit
class foodMenuController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
let foodMenuController = segue.destinationViewController as! foodTableViewController
if segue.identifier == "showBreakfast"
foodMenuController.contentMode = 1
else if segue.identifier == "showBakery"
foodMenuController.contentMode = 2
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
import UIKit
class foodTableViewCell: UITableViewCell
@IBOutlet weak var foodItem: UILabel!
@IBOutlet weak var foodDescription: UILabel!
@IBOutlet weak var foodPrice: UILabel!
override func awakeFromNib()
super.awakeFromNib()
// Initialization code
override func setSelected(selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
import UIKit
class foodTableViewController: UITableViewController
// Content Mode Selection in menu
var contentMode = 0
// THIS SHOULD BE LOADED WHEN CONTENT MODE is "1" --> BREAKFAST
var foodItems = ["Bread", "Coffee", "Nada"]
var foodInfo = ["Good", "Nice", "Nothing"]
var foodPrice = ["$1", "$100", "$12,40"]
// THIS SHOULD BE LOADED WHEN CONTENT MODE IS "2" --> LUNCH
var foodItems = ["Not bread", "Not Coffee", "Something"]
var foodInfo = ["Not good", "Not nice", "Yes"]
var foodPrice = ["$1", "$100", "$12,40"]
override func viewDidLoad()
super.viewDidLoad()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
// Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return foodItems.count
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cellIdentifier = "Cell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! foodTableViewCell
cell.foodItem.text = foodItems[indexPath.row]
cell.foodDescription.text = foodInfo[indexPath.row]
cell.foodPrice.text = foodPrice[indexPath.row]
return cell
【问题讨论】:
您在名为foodMenuController
的类中有一个名为foodMenuController
的变量,但该变量不是foodMenuController
类型。我建议清理您的命名(包括大写)以避免不必要的混淆。
【参考方案1】:
如下所示更改数组名称。
// THIS SHOULD BE LOADED WHEN CONTENT MODE is "1" --> BREAKFAST
let breakfastItems = ["Bread", "Coffee", "Nada"]
let breakfastInfo = ["Good", "Nice", "Nothing"]
let breakfastPrice = ["$1", "$100", "$12,40"]
// THIS SHOULD BE LOADED WHEN CONTENT MODE IS "2" --> LUNCH
let lunchItems = ["Not bread", "Not Coffee", "Something"]
let lunchInfo = ["Not good", "Not nice", "Yes"]
let lunchPrice = ["$1", "$100", "$12,40"]
var foodItems: [String] = []
var foodInfo: [String] = []
var foodPrice: [String] = []
现在检查 ViewWillAppear
中 contentMode 的值
override func viewDidLoad()
super.viewDidLoad()
override func viewWillAppear(animated: Bool)
super.viewWillAppear(true)
switch (contentMode)
case 1:
foodItems = breakfastItem
foodInfo = breakfastInfo
foodPrice = breakfastPrice
case 2:
foodItems = lunchItem
foodInfo = lunchInfo
foodPrice = lunchPrice
default:
break
tableView.reloadData()
这会将所需的商品、信息、价格数组复制到 foodItem、foodInfo 和 foodPrice 数组中。您的其余代码将正常工作,UITableView
将根据需要填充。
【讨论】:
谢谢!但是我究竟把 viewWillAppear 的代码放在哪里呢? 你必须override
viewWillAppear
类的viewWillAppear
方法如图所示。
好的,代码已添加并且工作正常,但它没有将任何数据加载到 tableView 中......知道为什么吗?
检查FoodMenuController
和FoodTableViewController
中prepareForSegue
方法中设置的值是否符合要求。或者你可以在switch
中设置断点来查找执行的是哪个case。
我不确定您所说的“切换”是什么意思?我检查了segues,它们是正确的......它只是一直显示一个空白的Tableview..我从这里去哪里?还是我应该为此发布一个新问题?以上是关于如何准备 segue 在我的 TableViewController 中加载不同的数组?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 segues 之间拆分、子字符串和排序字符串,使其正确显示在我的表中?