Проблема: Как вызвать метод представления структуры SwiftUI из SceneDelegate - PullRequest
0 голосов
/ 01 ноября 2019

В настоящее время я не получаю его.

Проблема:

Попытка подключения к методу просмотра из делегата сцены, например:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
  var window: UIWindow?

  ...

  func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    // guard let contentView = ???? as? ContentView else { return }
    // contentView.callMethod(parameter: true)
  }
}
struct ContentView: View {    
  var body: some View {
    ...
  }

  func callMethode(parameter: Bool) {
    print("called")
  }
}

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

thx Jo

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Большое спасибо. Полностью понято ... Будет читать документы ...

Так что это возможный способ в качестве примера:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?
    let activity = UserActivityManager()

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        let contentView = ContentView()

        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: contentView.environmentObject(activity))
            self.window = window
            window.makeKeyAndVisible()

            if let userActvity = connectionOptions.userActivities.first {
                guard let title = userActvity.title else { return }
                activity.doAction(action: title)
            }
        }
    }

    func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
        guard let title = userActivity.title else { return }
        activity.doAction(action: title)
    }
}
0 голосов
/ 02 ноября 2019

Это противоречит дизайну инфраструктуры SwiftUI. Вы не должны иметь постоянного представления о том, чтобы вызывать методы. Вместо этого представления создаются и отображаются по мере необходимости в ответ на изменение состояния вашего приложения.

Например, если ваш SceneDelegate имеет ссылку на экземпляр класса модели, и ваше представление зависит от этой модели, вы можете изменить модель в сцене (_: continue :), и ваше представление обновится автоматически.

Если вы можете предоставить больше подробностей о том, что вы пытаетесь сделать, я могу дать более конкретный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...