2017-07-06 148 views
1

嗨我在這裏的建議,看看我在做什麼是最好的選擇是很好的迅速。我有從viewcontroller1呈現的視圖控制器。在viewcontroller2我有一個文本框,當文本已滿時,將文本保存到我的單例文件,並通過協議在視圖控制器1中啓動一個操作,以將該文本保存到數據庫並使用這些標籤更新視圖控制器1中的uilabels,然後我解僱了視圖控制器二。我從視圖控制器1中的視圖控制器2啓動一個功能,將單個數據保存到數據庫。這很好嗎。如果你有任何問題隨時問。從另一個視圖控制器的視圖控制器觸發器操作

class ViewController1: UIViewController, EditProtocol{ 
    var label = UIlabel() 
    @IBAction func Editname(_ sender: Any) { 
    if let vc = storyboard.instantiateViewController(withIdentifier: "ViewController2Identifier") as? ViewController2{ 
     vc.controller = self 
     vc.modalPresentationStyle = .custom 
     vc.modalTransitionStyle = .crossDissolve 
     vc.setViewControllers([ProductInformation], animated: true) 
     self.present(vc, animated:true, completion: nil) 
    } 
} 

func SaveName() { 
    label.text = singleton.shared.text 
} 

    protocol EditProtocol { 
     func SaveName() 
    } 

class ViewController2: UIViewController{ 
     var controller: EditProtocol? 
     @IBOutlet weak var Name: UITextField! 
     @IBAction func Back(_ sender: AnyObject) { 
      singleton.shared.text = Name.text 
      controller?. SaveName() 
      self.dismiss(animated: true, completion: nil) 
      } 
    } 
+0

https://stackoverflow.com/a/30541063/2303865 –

回答

0

如果你的單例的唯一目的是記錄這段數據,那麼你不需要它。您可以直接將數據從VC2傳遞到VC1,然後保存到數據庫並在UI上顯示。

有幾種方法可以將數據從VC2傳遞迴VC1。你的委託沒問題,你也可以使用unwind segue或者NotificationCenter(我最喜歡的)。所有這三種方法都允許您傳遞數據,而不需要單個對象來保存數據。更重要的是,您可以將數據從VC2直接保存到數據庫,然後從VC1讀取。通過這種方式,你甚至不需要以上三個選項中的一個到傳遞數據

+0

我沒有傳回數據,我啓動了一個一旦數據在那裏就採取行動。這個問題的目的不是關於單例,而是關於從不同的視圖控制器啓動視圖控制器的動作。我在上面做得很好。如果需要的話,我可以重新說明問題 – ahmed

+0

@ahmed所有三個選項都可以讓你發起一個動作。所有三個選項都很好用。你可以選擇代表。我唯一看起來錯誤的方式就是單身,所以我爲你提到了這個。除此之外,我無法看到您的設計有任何問題,多數民衆贊成它:) –

相關問題