通過同一文件內但結構外的函數更改狀態

薩丘

我有一個加載屏幕,一旦一些圖像完成加載,它應該導航到contentview我使用前兩個函數加載圖像,最後觸發導航到內容視圖。當狀態變量activateNavigation變為真時觸發導航問題是我需要在結構外的函數中更改狀態。我似乎無法弄清楚如何做到這一點,您可以在下面的最終代碼片段中看到它。

LoadingScreen().onAppear(){
   getImages();
   convertImages();
   triggerNavigationToContentView();
}
struct LoadingScreen: View{
    @State var text = ""
    @State var activateNavigation = false
    let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
    var body: some View{
        NavigationView{
            VStack{
                Text("Loading images \(text)")
                    .font(.system(size: 24)).bold()
                    .transition(.slide)
                    .onReceive(timer, perform: {(_) in
                        if self.text.count == 3 {
                            self.text = ""
                        } else {
                            self.text += "."
                        }
                    })
                    .onAppear(){
                        self.text = "."
                    }
                NavigationLink(destination: ContentView(), isActive: $activateNavigation, label: { EmptyView() })
            }
            
        }
    }
}
triggerNavigationToContentView(){
    activateNavigation = true;
}
普拉納夫磁帶

如果您將綁定注入第二個,View它應該可以正常工作。

NavigationLink(destination: ContentView($activateNavigation), isActive: $activateNavigation, label: { EmptyView() })
struct ContentView: View {
  @Binding var activateNavigation: Bool
  ...
}

綁定在整個視圖路由中保持不變,因此如果您現在設置activateNavigationContentView它也會更新LoadingScreen(反之亦然)。

如果您需要在其他地方觸發流程,您也可以在其他結構的初始化程序中使用綁定。我不推薦全局函數。

請注意, using$activateNavigation將 隱式轉換@State@Binding,不需要樣板。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章