首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在选择特定视图时,如何使用生命周期方法?

在选择特定视图时,如何使用生命周期方法?
EN

Stack Overflow用户
提问于 2020-09-07 05:04:58
回答 1查看 77关注 0票数 0

我目前正在使用SwiftUI开发一个应用程序。

这个应用程序有两个视图控制一个Tab视图。

只有在选择特定视图时,我才希望在sceneDidBecomeActivesceneWillEnterForeground中使用这些方法。

无论选择哪个视图,这些方法都可以工作。

我怎样才能完成这个请求?

SceneDelegate.swift

代码语言:javascript
复制
import SwiftUI

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

    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)
            self.window = window
            window.makeKeyAndVisible()
        }
    }
    func sceneDidDisconnect(_ scene: UIScene) {
    }
    func sceneDidBecomeActive(_ scene: UIScene) {
        // I want use this print method only when FirstView is selected
        print("selected FirstVIew")
    }
    func sceneWillResignActive(_ scene: UIScene) {
    }
    func sceneWillEnterForeground(_ scene: UIScene) {
        // I want use this print method only when FirstView is selected
        print("selected FirstVIew")
    }
    func sceneDidEnterBackground(_ scene: UIScene) {
    }
}

ContentView.swift

代码语言:javascript
复制
import SwiftUI

struct ContentView: View {
    
   var body: some View {
        TabView {
           FirstView()
                .tabItem {
                        Text("First")
            }.tag(1)
           SecondView()
                .tabItem {
                        Text("Second")
            }.tag(2)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

FirstView.swift

代码语言:javascript
复制
import SwiftUI

struct FirstView: View {
    var body: some View {
        Text("FirstView")
    }
}

struct FirstView_Previews: PreviewProvider {
    static var previews: some View {
        FirstView()
    }
}

SecondView.swift

代码语言:javascript
复制
import SwiftUI

struct SecondView: View {
    var body: some View {
        Text("SecondView")
    }
}

struct SecondView_Previews: PreviewProvider {
    static var previews: some View {
        SecondView()
    }
}

Xcode: 11.7版

Swift: Swift 5

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-11 07:55:39

SceneDelegate方法处理的是应用程序的生命周期,而不是视图的生命周期。因此,当选择视图时,您不能“运行”它们。

不过,您可以做的是使用UserDefaults。

代码语言:javascript
复制
// When first view selected
UserDefaults.standard.set("First View", forKey: "selectedView")

// In SceneDelegate
func sceneDidBecomeActive(_ scene: UIScene) {
    if let selected = UserDefaults.standard.string(forKey: "selectedView"),    
             selected == "First View" {
        print("selected FirstVIew")
    }
}

func sceneWillEnterForeground(_ scene: UIScene) {
    if let selected = UserDefaults.standard.string(forKey: "selectedView"),          
              selected == "First View" {
        print("selected FirstVIew")
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63771655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档