SwiftUI iOS 17 Xcode 15将带有操作的按钮更改为NavigationLink或?

x7rlezfr  于 11个月前  发布在  iOS
关注(0)|答案(1)|浏览(131)

我有一个视图,它是根据布尔值的状态有条件地呈现的。
它目前正在工作,但我试图清除此警告:
“init(destination:isActive:label:)”在iOS 16.0中已弃用:在NavigationStack或NavigationSplitView中使用NavigationLink(value:label:)或navigationDestination(isPresented:destination:)
因此,我试图导航到一个视图时,视图 Package 在一个按钮按下。

import SwiftUI

struct Question: View {
    @EnvironmentObject var invoiceViewModel: InvoiceViewModel
    @EnvironmentObject var settingsViewModel: SettingViewModel
    @State private var showingAlert = false
    
    var body: some View {
        NavigationStack{
            ZStack {
                // THIS WORK BUT IS DEPRECIATED
                NavigationLink(destination: BusinessDetails(), isActive: $invoiceViewModel.isShowBusinessDetaisLinkActive) {
                    EmptyView()
                }
                if invoiceViewModel.invoices().count == 0 {
                    // do stuff
                }else{
                    List{
                        // show created items
                    }
                    // THIS WORKS FOR OTHER VIEWS BUT NOT FOR BusinessDetails()
                    .navigationDestination(isPresented: $invoiceViewModel.isShowInvoiceDetaisLinkActive) {
                        InvoiceDetailView()
                    }
                }
                
                
                VStack{
                    //THIS IS WHERE CONDITIONAL RENDERING IS TOGGLING THE BOOL
                    // THAT FIRES THE NAVIGATION LINK WHERE I AM GETTING DEPRECAITION WARNING
                    if !settingsViewModel.checkBusinessDetailsComplete() {
                        Button(action: {
                            invoiceViewModel.isShowBusinessDetaisLinkActive.toggle()
                        }, label: {
                            
                            BusinessDetailsHeader()
                                .clipShape(RoundedRectangle(cornerRadius: 10))
                            
                        })
                        
                        .padding()
                    }
                    Spacer()
                }
                
            }
        .navigationDestination(isPresented: $invoiceViewModel.isShowAddNewInvoice) {
          AddNewInvoice()
       }
            .navigationTitle("Recent Invoices")
            .toolbar(content: {
                ToolbarItem(placement: .navigationBarTrailing) {
                    Button{
                        if !settingsViewModel.checkBusinessDetailsComplete() {
                            showingAlert = true
                        }else{
                            withAnimation{
                                invoiceViewModel.showAddNewInvoice()
                            }
                        }
                    } label: {
                        Label("Add", systemImage: "plus.circle")
                    }
                    
                    .alert("Complete Your Business Details", isPresented: $showingAlert) {
                        Button("Business Details") {
                            invoiceViewModel.isShowBusinessDetaisLinkActive.toggle()
                        }
                    }
                }
            })
            
        }
    }
}

#Preview {
    Question()
}

字符串

pvcm50d1

pvcm50d11#

这只是我调用多个navigationDestination调用的地方。只是必须在NavigationStack的末尾调用它们

相关问题