2017-07-06 149 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所有三个选项都可以让你发起一个动作。所有三个选项都很好用。你可以选择代表。我唯一看起来错误的方式就是单身,所以我为你提到了这个。除此之外,我无法看到您的设计有任何问题,多数民众赞成它:) –

相关问题