从另一个视图控制器触发视图控制器的操作

时间:2017-07-06 18:09:38

标签: ios swift

嗨,我在这里寻求建议,看看我正在做的是最好的选择是否适合迅捷。我有一个视图控制器,我从viewcontroller1呈现。在viewcontroller2中我有一个文本字段,当文本已满时,我将文本保存到我的单例并通过协议在视图控制器1中启动一个操作,将该文本保存到数据库并使用这些标签更新视图控制器1中的uilabels然后我解雇了视图控制器二。我从视图controller1中的视图controller2启动一个函数,将数据从单例保存到数据库。这很好吗。如果您有任何问题随时问。

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

1 个答案:

答案 0 :(得分:0)

如果您的单身人士的唯一目的是记录这段数据,那么您不需要它。您可以直接将数据从VC2传递到VC1,然后保存到数据库并在UI上显示。

有几种方法可以将数据从VC2传回VC1。你的代表没问题,你也可以使用unwind segue或NotificationCenter(我最喜欢的)。这三种方法都允许您传递数据而无需单个对象来保存数据。更重要的是,您可以将数据从VC2直接保存到数据库,然后从VC1读取数据。这样,您甚至不需要上面三个选项中的一个来传递数据