我有一個加載螢屏,一旦一些影像完成加載,它應該導航到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;
}
uj5u.com熱心網友回復:
您可以Binding使用init(get:set:)初始化程式創建行內。
...
NavigationLink(
destination: ContentView(),
isActive: .init(
get: { activateNavigation },
set: { activateNavigation = $0 }
),
label: { EmptyView() }
)
...
uj5u.com熱心網友回復:
如果您將系結注入第二個,View它應該可以正常作業。
NavigationLink(destination: ContentView($activateNavigation), isActive: $activateNavigation, label: { EmptyView() })
struct ContentView: View {
@Binding var activateNavigation: Bool
...
}
系結在整個視圖路由中保持不變,因此如果您現在設定它activateNavigation,ContentView它也會更新LoadingScreen(反之亦然)。
如果您需要在其他地方觸發流程,您也可以在其他結構的初始化程式中使用系結。我不推薦全域函式。
請注意, using$activateNavigation將 隱式轉換@State為@Binding,不需要樣板。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/337918.html
