簡體   English   中英

如何在 iOS16 的 Swift 中將 init(destination:tag:selection:label:) 替換為 NavigationLink(value:label:)?

[英]How to replace init(destination:tag:selection:label:) with NavigationLink(value:label:) in Swift for iOS16?

我正在使用以下 Swift 代碼在我的 iPhone 應用程序中做兩件事:

  1. 單擊按鈕時調用方法somethingElse()
  2. 將視圖更改為SecondView()

代碼

struct PrimaryView: View {
  @State var buttonSelected: Int? = nil
  
  func onSubmit() {
    somethingElse()
    self.buttonSelected = 1
  }

  var body: some View {
    NavigationStack {
      NavigationLink(destination: SecondView(), tag: 1, selection: $buttonSelected) {
        Button(action: {
          onSubmit()
        }) {
          Text("Click me")
        }
      }
    }
  }
}

這工作正常,但我收到以下警告:

'init(destination:tag:selection:label:)' 在 iOS 16.0 中被棄用:在 NavigationStack 或 NavigationSplitView 的列表中使用 NavigationLink(value:label:)...

問題:如何重構此代碼以使警告消失但功能保持不變?

如果您按照警告中的建議進行操作,您會得到如下信息:

NavigationStack {
    List {
        NavigationLink(value: 1) { // use some tag here
            Button(action: {
                onSubmit()
            }) {
                Text("Click me")
            }
        }
    }.navigationDestination(for: Int.self) { _ in 
        // check the closure parameter here to return a different view
        SecondView() 
    }
}

當然,這會給你一個List 如果您不希望這樣,另一個重載destinationLink(isPresented:destination:)似乎可以工作。 代碼很簡單

NavigationStack {
    Button(action: {
        onSubmit()
    }) {
        Text("Click me")
    }.navigationDestination(isPresented: $buttonSelected, destination: { SecondView() })
}

隨着buttonSelected更改為Bool

@State var buttonSelected: Bool = false

func somethingElse() {
    print("something Else")
}

func onSubmit() {
    somethingElse()
    self.buttonSelected = true
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM