【问题标题】:how to pass data to previous viewController in iOS swift?如何在iOS swift中将数据传递给以前的viewController?
【发布时间】:2020-06-14 09:48:46
【问题描述】:

我的问题是重复的,但我不需要合适的答案。另外,我之前也提出过how to callback the array of data to another viewController in iOS Swift

我有一个名为 CreateCardViewController 的父 viewController 和一个名为 webViewController 的子控制器。

在父 viewController 中,我使用 carbonKit 来显示标签栏菜单。当标签栏菜单的第一个索引是 webViewController(即子控制器)时。

我的问题是:如何从子控制器向父控制器发送数据?

例如:从一个孩子,viewController 会得到一个标签栏菜单项的列表。获取标签栏菜单项后,我需要将菜单项发送到父视图控制器以显示标签栏。

这是我正在尝试做的清晰图片:

【问题讨论】:

    标签: ios swift cocoa-touch uiviewcontroller uitabbar


    【解决方案1】:

    您可以像@Aqua 所说的那样使用委托。或为此使用观察。

    class ParentViewController: UIViewController {
     override func viewDidLoad() {
            super.viewDidLoad()
            NotificationCenter.default.addObserver(self, selector: #selector(self.updateParentViewController(_:)), name: Notification.Name(rawValue: "updateParentViewController"), object: nil) 
     }
    @IBaction func updateParentViewController(_ notification: NSNotification){
    if let receivedData = notification.userInfo?["data"] as? Any {
        //use received data 
        // update your parentViewController. 
    }
    }
    }
    
    //.............
    
    class ChildViewController: UIViewController {
         override func viewDidLoad() {
            super.viewDidLoad()
    }
    func sendDataToParentViewController() {
            let dataDict:[String: Any] = ["data"://what you want to send.]
            NotificationCenter.default.post(name: . updateParentViewController, object: nil, userInfo: dataDict)
        }
    }
    

    这对我有用。

    【讨论】:

      【解决方案2】:

      在您的自定义 ChildViewController 添加 propertyparentViewController 并在创建该子视图控制器时设置它。然后,在父视图控制器上实现特定的方法,从子视图控制器接收数据。

      protocol ParentViewControllerProtocol {
          func receiveChildData(_ child: UIViewController, data: Any)
      }
      
      class ChildViewController: UIViewController {
          var parentViewController: ParentViewControllerProtocol!
      
          func timeToSendDataToParentViewController() {
               parentViewController.receiveChildData(self, data: self.data)
          }
      }
      
      class ParentViewController: UIViewController, ParentViewControllerProtocol {
           func receiveChildData(_ child: UIViewController, data: Any) {/*handle data*/}
      
           func addChildViewController() {
              let child = ChildViewController();
              child.parentViewController = self
              // do the rest of adding child to parent
           }
      }
      

      【讨论】:

      • 它显示错误属性 'parentViewController' 类型为 'ParentViewControllerProtocol?'无法覆盖类型为“UIViewController?”的属性
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多