2017-04-18 69 views
0

我正在製作一個基本的健身應用程序,並在其中有一個食物日記,用於跟蹤您每天所吃的食物。我有一個模式彈出(下圖),顯示您何時點擊「添加食物」。當按下「Save to Food Diary」按鈕時,我無法從模式彈出框中插入行。我還試圖將卡路里標籤更新爲用戶當天積累的當前卡路里。繼承人的代碼,我到目前爲止:使用模式彈出式菜單插入行到tableView

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) 




} 

modalpopup

foodDiary

基本上我想用我的PopUpVC更新我FoodDiaryVC,我努力通過兩個控制器之間的數據插入行並更新我的卡路里標籤。希望這被解釋得足夠好!

回答

1

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(name: "blah", calories : "blah")

+0

聽起來不錯,現在試試吧!快速的問題,我保持insertRows方法在我的「保存到日記」功能?或者我在我的foodDiaryVC中使用它? – thelegendary3

+0

所有的數據內容都應該在同一個地方完成,所以在foodDiaryVC中。您的彈出窗口應該只收集數據以創建該行,並讓您的DiaryVC執行此操作 – CZ54

+0

非常感謝!有效!我知道委託方法是要走的路,再次感謝! – thelegendary3