Ios 使用模式弹出窗口向tableView插入行

Ios 使用模式弹出窗口向tableView插入行,ios,swift,uitableview,modalpopup,Ios,Swift,Uitableview,Modalpopup,我正在制作一个基本的健身应用程序,里面有一本食物日记,记录你每天吃的食物。我有一个模式弹出窗口(下图),当你点击“添加食物”时显示。当按下“保存到食物日记”按钮时,我无法从模式弹出窗口插入行。我还尝试将卡路里标签更新为用户一天中累积的当前卡路里。以下是我目前掌握的代码: class PopupVC: UIViewController { var section: Int? var caloriesLabel = " " var tableData: [String] = [""] let fo

我正在制作一个基本的健身应用程序,里面有一本食物日记,记录你每天吃的食物。我有一个模式弹出窗口(下图),当你点击“添加食物”时显示。当按下“保存到食物日记”按钮时,我无法从模式弹出窗口插入行。我还尝试将卡路里标签更新为用户一天中累积的当前卡路里。以下是我目前掌握的代码:

class PopupVC: UIViewController {
var section: Int?
var caloriesLabel = " "

var tableData: [String] = [""]
let foodDiary = FoodDiary()
var caloriesCell = caloriesForDiary()
@IBOutlet weak var foodTimeLabel: UILabel!
@IBOutlet weak var foodPopup2: UIView!
@IBOutlet weak var foodPopUp: UIView!
@IBOutlet weak var inputFood: UITextField!
@IBOutlet weak var inputCals: UITextField!

@IBAction func saveToDiary(_ sender: Any) {
    if (inputFood.text?.isEmpty)! || (inputCals.text?.isEmpty)! {
        return
    }

    caloriesLabel = foodDiary.testVariable
    tableData.append(inputFood.text!)
    foodDiary.tableView.beginUpdates()
    foodDiary.tableView.insertRows(at: [IndexPath.init(row: (tableData.count) - 1, section: section!)], with: .automatic)
    foodDiary.tableView.endUpdates()
    dismiss(animated: true, completion: nil)




}


基本上,我正在尝试使用我的PopUpVC更新我的FoodDiaryVC,我正在努力将两个控制器之间的数据传递到insertRows并更新我的卡路里标签。希望这解释得足够好

iOS方法是创建一个委托

@protocol AddRowDelegate {
func didAddRow(name : String, calories : String)
}
那么您的FoodDiaryVC应该实现它:

@class FoodDiaryVC : UIViewController, AddRowDelegate {
///Your code
}
将委托变量添加到弹出类中

class PopUpVC : UIVIewController {

    weak var delegate : AddRowDelegate?
}
否显示弹出窗口时,您必须设置代理

myPopUp.delegate=self

当用户点击“添加到日记”时,只需调用代理即可


delegate?.didAddRow(名字:“废话”,卡路里:“废话”)

听起来不错,现在就试试吧!快速提问,我是否在“保存到日记”功能中保留insertRows方法?或者我在我的foodDiaryVC中使用它?所有的数据都应该在同一个地方完成,所以在foodDiaryVC中。您的弹出窗口应该只收集创建行的数据,并让您的日记VC做很多事情!成功了!我知道委托方法是最好的选择,再次感谢!!再次抱歉,我的卡路里标签仍然拒绝更新。我不知道为什么。我正在这样做:IBAction func saveToDiary(uSender:Any){dismise(动画:true,完成:nil)delegate?.didAddRow(名称:inputFood.text!,卡路里:inputCals.text!)你的didarrow函数中有什么?委托是否非nil?