【问题标题】:Add items to another view controller table view on button click单击按钮将项目添加到另一个视图控制器表视图
【发布时间】:2019-06-29 10:02:44
【问题描述】:

我有一个名为 ListViewController 的视图控制器和另一个名为 AddFoodViewController 的视图控制器。在 ListViewController 中,用户可以将自己的成分添加到以表格视图显示的杂货清单中。当他们转到 AddFoodViewController 时,用户应该能够单击一个按钮,上面写着“添加到列表”,这会将配料​​数组(已经在表格视图中显示)添加到购物清单中。我是新手,所以我想知道是否有人可以提供帮助?我已经成功地让 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
           }
    }
}

【问题讨论】:

  • 单击添加按钮时,将新数据追加到数组中并重新加载 tableView 以显示新数据
  • 不相关但在cellForRow 中初始化单元格是非常糟糕的做法。在 Interface Builder 中设计一个原型单元并重用它。而return不是函数,去掉括号:return array.count
  • 我有点困惑。你说 List Then food,但我看到 segue 是从 food 到 list。
  • @AnkurLahiry,这就是我想做的。将 AddFoodViewController 中数组中的食物成分添加到杂货清单 (ListViewController) 表格视图中。但我不知道该怎么做,我试过 segue 但我认为我做错了,或者我需要使用委托,因为杂货清单在以前的视图控制器中?但我不知道具体如何实现。
  • @Wings 你会怎么做?我需要委托吗?

标签: ios arrays swift uitableview delegates


【解决方案1】:

将数据传递给前一个视图控制器可以通过委托模式来实现,首先,在你的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目标视图控制器(记得在故事板中分配它的类名),并将委托分配给自己。

// 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
    }
}

【讨论】:

  • 我尝试实现代码,但由于某种原因,当我尝试在扩展中附加数组时,它给了我“使用未解析的标识符'数组'”
  • 还需要有关您的代码和 ListViewController 代码的更多信息,不要只是复制和粘贴,一些变量命名不一样。
  • ListViewController 基本上是一个购物清单,用户可以在其中添加和删除自己的杂货项目:var items: [String] = []。另一个视图控制器 (AddFoodViewController) 在内部包含一个 tableview,它显示特定膳食的一系列成分。因此,当用户按下“添加到列表”按钮时,这些食材会自动添加到购物清单中。
  • AddFoodViewController 中的成分数组是 var array = ["1 Salad", "3oz Chicken", "2 Tomatoes", "2 Cucumbers"] ,所以我不确定为什么当我尝试将它附加到 ListViewController 扩展中时它会给我一个错误。抱歉,我希望我能清楚地解释这一点,而且是有道理的。
  • 视图层次结构:ListViewController -> AddFoodViewController 对吗? override func prepare(for segue: UIStoryboardSegue, sender: Any?) 应该在 ListViewController 中实现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2013-04-25
  • 2020-08-19
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多