Sie können Delegierung verwenden. Ich werde mit einem etwas einfacheren Beispiel mit zwei Tab-Bars erklären, aber Sie können es nach Ihren Bedürfnissen verwandeln.
Zuerst müssen wir ein Protokoll und eine Funktion erstellen, die wir in unserem gewünschten View-Controller ausführen möchten.
protocol DataDelegate: class {
func didReceiveData(data: String)
}
Lassen Sie uns sagen, dass wir FirstViewController haben, die für die erste tabBar und SecondViewController für die zweite tabBar. In der SecondViewController müssen wir eine schwache Variable für unseren Delegaten deklarieren.
// In SecondViewController
weak var dataDelegate: DataDelegate?
Im FirstViewController wir zum UITabBarControllerDelegate entsprechen müssen (nicht vergessen, den Delegierten selbst in viewDidLoadself.tabBarController?.delegate = self
eingestellt) und verwenden Sie die delegierte Methode tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController)
// MARK: - TabBarControllerDelegate
extension FirstViewController: UITabBarControllerDelegate {
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
if let secondViewController = viewController as? SecondViewController {
secondViewController.dataDelegate = self
}
}
}
Wie wir sehen können viewController ist der ViewController, den wir angeklickt haben (in unserem Fall SecondViewController). Wir müssen es in SecondViewController umsetzen, damit wir Zugriff auf seine Eigenschaften haben und dataDelegate auf self setzen können.
Jetzt sind wir verpflichtet, dem DataDelegate Protokoll zu entsprechen. Wir haben nur eine Funktion, die wir implementieren müssen - didReceiveData().
// MARK: - DataDelegateProtocol
extension FirstViewController: DataDelegate {
func didReceiveData(data: String) {
print(data)
}
}
schließlich in unserem SecondViewController müssen wir sagen, wo wir die Funktion ausgeführt werden soll. Ich werde es tun viewDidAppear aber Sie können, wo immer Sie brauchen.
// In SecondViewController
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
self.dataDelegate?.didReceiveData("data")
}
Dieser Kerl erklärt Delegation gut link. Ich hoffe du hast es verstanden.
Verwenden Sie sharedInstance http://stackoverflow.com/questions/36494722/ios-sharing-data-between-viewcontrollers –