Как я могу узнать, когда вкладка была переключена? - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть приложение, в котором пользовательский интерфейс настраивается программно, а не с использованием раскадровок. Я застрял на том, как узнать, когда вкладка была переключена ... и когда она была переключена, я хочу иметь возможность назначить свойство под названием "userSettings" в каждом контроллере представления, чтобы я мог передавать этот объект и вызывать методы соответственно.

Вот мой делегат приложения:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var contentVC: BMContentViewController?
    var settingsVC: BMSettingsViewController?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        window = UIWindow(frame: UIScreen.main.bounds)

        contentVC = BMContentViewController()
        contentVC?.view.backgroundColor = .clear
        contentVC?.tabBarItem.title = "Content"

        settingsVC = BMSettingsViewController()
        settingsVC?.view.backgroundColor = .clear
        settingsVC?.tabBarItem.title = "Settings"

        let tabbarController = UITabBarController()
        tabbarController.viewControllers = [(contentVC ?? UIViewController()), settingsVC ?? UIViewController()]

        self.window?.rootViewController = tabbarController
        self.window?.makeKeyAndVisible()

        return true
    }

    func applicationWillResignActive(_ application: UIApplication) {}
    func applicationDidEnterBackground(_ application: UIApplication) {}
    func applicationWillEnterForeground(_ application: UIApplication) {}
    func applicationDidBecomeActive(_ application: UIApplication) {}
}

BMContentViewController () и BMSettingsViewController () имеют свойство с именем:

var userSettings: BMUserSettings?

Я запускаю приложение выключено в BMContentViewController (). Когда я переключаю вкладки, я хочу иметь возможность назначать userSettings в BMSettingsViewController () для userSettings, который находится в BMContentViewController (). userSettings является центральным объектом в моем приложении, и вместо создания синглтона я пытаюсь заставить приложение работать, просто передавая ссылку на объект другим контроллерам представления.

Я не уверен если это возможно, обнаруживая, когда вкладка была переключена и передавая значение, или если мне нужно использовать шаблон делегата вместо этого?

Как я могу выполнить sh это? Я пытаюсь избежать использования синглетонов.

1 Ответ

0 голосов
/ 28 февраля 2020

Вы можете передавать данные между контроллерами представления 6 способами:

  1. Instance свойство (A → B)
  2. Segues (для раскадровок)
  3. Instance свойства и функции (A ← B)
  4. Delegation шаблон - вы можете попробовать шаблон делегата, это будет мой первый лучший вариант
  5. Closure или completion handler
  6. NotificationCenter и шаблон Observer - это будет второй лучший вариант в вашем случае.
...