我有一个名为ListViewController的视图控制器,另一个名为AddFoodViewController。在ListViewController中,用户可以将自己的食材添加到以表格视图显示的食品杂货清单中。当用户转到AddFoodViewController时,用户应该能够单击显示为“添加到列表”的按钮,该按钮会将ingrediets数组(已在表格视图中显示)添加到杂货店列表中。我对此很陌生,所以我想知道是否有人可以提供帮助?我已经成功地使ListViewController可以工作,但是我不确定如何将AddFoodViewController中的成分数组添加到以前的ListViewController中。
class AddFoodViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{
@IBOutlet weak var FoodTableView: UITableView!
@IBOutlet weak var sendFoodBtn: UIButton!
//array of food
let array = ["1 Salad", "3oz Chicken", "2 Tomatoes", "2 Cucumbers"]
let category = ""
override func viewDidLoad() {
super.viewDidLoad()
}
//display array in table view
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return(array.count)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let foodCell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "foodCell")
foodCell.textLabel?.text = array[indexPath.row]
foodCell.backgroundColor = .clear
foodCell.textLabel?.textColor = .darkGray
foodCell.textLabel?.font = UIFont(name: (foodCell.textLabel?.font.fontName)!, size:17)
return foodCell
}
//button that is supposed to add all ingredients to the ListViewController
@IBAction func addOnClick(_ sender: Any) {
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if(segue.identifier == "toList"){
let vc = (segue.destination as! ListViewController)
vc.category = array
}
}
}
最佳答案
可以通过委托模式来实现将数据传递到先前的视图控制器的方法,首先,在AddFoodViewController
中声明一个协议,然后在视图控制器中定义一个委托属性。
// AddFoodViewController.swift
protocol AddFoodViewControllerDelegate {
func addIngredient(array: [String])
}
class AddFoodViewController: UIViewController {
...
var delegate: AddFoodViewControllerDelegate?
// MARK: add function
func actionAdd() {
delegate?addIngredient(array)
}
...
}
回到您的
ListViewController
,找到您的AddFoodViewController
的segue目标视图控制器(记住在情节提要中分配其类名),然后将委托分配给self。// ListViewController.swift
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
...
let vc = segue.destination as? AddFoodViewController
vc?.delegate = self
...
}
// in the same file, implement delegate method here
extension ListViewController: AddFoodViewControllerDelegate {
func addIngredient(array: [String]) {
items += array
// do table reload or something
}
}