标签: swiftui-navigationlink

SwiftUI:删除后更新 NavigationView (iPad)

我想在 iPad 上删除行后显示空视图(此处:) 。Text("Please select a person.")

目前: iPad 上的详细视图在删除项目后不会更新。 预期:删除所选项目后显示空视图。

struct DetailView: View {
    var name: String
    var body: some View {
        Text("Detail of \(name)")
    }
}

struct MainView: View {
    @State private var users = ["Paul", "Taylor", "Adele"]

    var body: some View {
        NavigationView {
            List {
                ForEach(users, id: \.self) { user in
                    NavigationLink(destination: DetailView(name: user)) {
                        Text(user)
                    }
                }
                .onDelete(perform: delete)
            }
            Text("Please select a person.")
        }
    }

    func delete(at offsets: IndexSet) …
Run Code Online (Sandbox Code Playgroud)

swift swiftui swiftui-navigationlink

5
推荐指数
1
解决办法
757
查看次数

SwiftUI Picker 在通过 NavigationLink 显示时崩溃

有没有人有解决以下崩溃的方法?

我有一个通过 NavigationLink 在父导航控制器中显示的表单,如下所示:

    var body: some View {
        NavigationView {
            NavigationLink(destination: PickerView()) {
                Text("Picker View")
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

PickerView 有三个选择器。第一个确定显示其他哪些:

struct PickerView: View {
    @State var sectionValue = "pet"
    @State var petValue = "dog"
    @State var fruitValue = "apple"
    @State var foodValue = "pasta"
    var body: some View {

        Form {

            Picker(selection: $sectionValue, label: Text("What is your favorite?")) {
                Text("Pet").tag("pet")
                Text("Fruits").tag("fruits")
                Text("Foods").tag("foods")
            }

            if (sectionValue == "pet") {
                Picker(selection: $petValue, label: Text("Favorite pet")) {
                    Text("Dog").tag("dog")
                    Text("Cat").tag("cat")
                    Text("Lizard").tag("lizard")
                }
            } …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui swiftui-navigationlink swiftui-picker

5
推荐指数
1
解决办法
867
查看次数

SwiftUI 不会更新第二个 NavigationLink 目的地

我有一个列表,其中包含推送视图的行。该视图有另一个列表,它推送另一个视图。原来的List,第一个推送的List会随着数据的变化而更新。但是,推送时最后一个视图不会更新。当我向后滑动视图不再更新时,即使它曾经更新过。

HomeView > UserView > ItemView

User 和 Item 是可识别的结构。我试过让它们 Hashable 并使用id: \.self,但这似乎也不起作用。

class App: ObservableObject {
    @Published var users = [User]()
}

struct HomeView {

    @EnvironmentObject var app: App

    var body {
        List {
            Section {
                ForEach(app.users) { user in
                    NavigationLink(destination: UserView(user: user)) {
                        Text(user.name)
                    }
                }
            }
        }
    }

}

// Updates fine when `app.users` updates
// Stops updating after going back from ItemView
struct UserView {

    let user: User

    var body {
        List {
            Section …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink

5
推荐指数
1
解决办法
1673
查看次数

SwiftUi - 隐藏“后退”按钮和导航栏(出现几分之一秒)

我使用此代码来隐藏导航栏和后退按钮,但是当加载视图时,我仍然可以看到后退按钮一小会儿,然后它就消失了。有什么办法可以阻止它被显示吗?

var body: some View {
    NavigationView {
        NavigationLink(destination: DeferView { WeekView(journey: self.launcher.completeJourney!) }, isActive: self.$launcher.readyJourney ) { EmptyView () }
        .navigationBarHidden(true)
        .navigationBarTitle("")
    }
}
Run Code Online (Sandbox Code Playgroud)

先感谢您,

navigationbar swiftui navigationlink swiftui-navigationlink

5
推荐指数
1
解决办法
3638
查看次数

SwiftUI - NavigationLink 返回上一个视图

我正在通过构建一个具有“设置视图”的应用程序来测试 SwiftUI,我们将其称为 ViewB。该视图有一个列表,您可以在其中选择语言。第一个视图 ViewA 有 2 个按钮“打开”或“选择语言”。

我想做的是,从ViewA开始,打开ViewB,选择一种语言,然后自动回到ViewA。这就是我所做的:

视图A

var body: some View {
    NavigationView {
        VStack(alignment: .center) {
            Button(action: start) {
                Text("Open")
            }
            NavigationLink(destination: ViewB()) {
                Text("Change language")
            }
        }
        .sheet(isPresented: $presenting) {
            DemoView(code: self.langugage ?? "SE") { result in }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我在 ViewB 上取得的进展:

var body: some View {
    List(langs) { item in
        HStack {
            NavigationLink(destination: ViewA(presentingSuccessScreen: self.$isPresentingSuccessScreen, language: item.code)) {
                Image(item.icon).resizable().frame(width: 40, height: 40)
                Text(item.market)
            }.frame(height: 64)
        }
        .navigationBarTitle(Text("Select Language"), displayMode: .inline)
        .navigationBarBackButtonHidden(true)
        .navigationBarItems(trailing:
            Button("Cancel") …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-list swiftui-navigationlink

5
推荐指数
1
解决办法
6718
查看次数

如果列表顺序更改,SwiftUI NavigationView 中的选择会丢失

这是测试数据模型:

class Item: Identifiable {
  let name: String

  init( n: Int) {
    self.name = "\(n)"
  }
}

class Storage: ObservableObject {
  @Published var items = [Item( n: 1), Item( n: 2)]

  func reverse() {
    items = self.items.reversed()
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我的内容视图,其中有一个NavigationLink和一个详细视图,其中有一个反转项目顺序的按钮:

struct ContentView: View {

  @ObservedObject
  var storage = Storage()

  var body: some View {
    NavigationView {
      List {
        ForEach( storage.items) { item in
          NavigationLink( destination: Button( action: {
            self.storage.reverse()
          }) {
            Text("Reverse")
          }) {
            Text( item.name).padding()
          }
        } …
Run Code Online (Sandbox Code Playgroud)

swift swiftui swiftui-list swiftui-navigationlink

5
推荐指数
1
解决办法
1289
查看次数

ContextMenu 中的 NavigationLink 在 iOS14 xcode12 beta3 中不再工作?

想知道其他人是否也遇到此问题,以及是否找到了解决方法。这在 iOS 13 中工作正常,但在 iOS 14 中似乎被破坏了。我只是想从 .contextMenu 触发到另一个视图的 NavigationLink。

我的代码如下。

import SwiftUI

struct ContentView: View {
    var body: some View {
        
        NavigationView {
            VStack {
                HStack {
                    Text("I am a text in a HStack ")
                }
                HStack {
                    NavigationLink(destination: TestView()) {
                        VStack {
                            Image(systemName:"gauge")
                                .font(.system(size: 31))
                        }
                    }
                }
            }
            .contextMenu {
                NavigationLink(destination: TestView()) {
                    Text("Navigate to TestView")
                    Image(systemName: "pencil")
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Destination TestView() 只是一个样板“Hello World”视图。

如果我没有单击堆栈中关联的图标,则会完美触发导航。但上下文菜单中的相同链接却没有。当我在上下文菜单中选择它时,什么也没有发生。即,我可以选择菜单项,但它所做的只是关闭上下文菜单,并且我保持在同一视图上。

还有其他人发现这个吗?解决了吗?谢谢

contextmenu swiftui swiftui-navigationlink ios14 xcode12

5
推荐指数
1
解决办法
1498
查看次数

栏中项目中的导航链接返回到导航视图的顶部

struct Testing: View {

    var body: some View {
        NavigationView{
            VStack {
                Text("View 1")
                Text("View 1.3")
            
                NavigationLink(destination: TestView(),
                                    label: {
                                        Text("View 1 navigation")
                                    })
            }
        }
    }
}

struct TestView: View {

    var body: some View {
            VStack {
                Text("View 2")
            }
            .navigationBarItems(trailing:NavigationLink(
                                    destination: Text("View 3"),
                                    label: {
                                        Text("Navigate")
                                     }))
    }
}
Run Code Online (Sandbox Code Playgroud)

当单击NavigationLinkTestViews 内部时navigationBarItems,它会导航到视图 3。当我单击后退按钮时,它不会返回到 TestView,而是会一直返回到测试。

如何让它返回到上一个视图而不是第一个视图?

我正在使用 Xcode 12。

swift swiftui swiftui-navigationlink

5
推荐指数
1
解决办法
1097
查看次数

SwiftUI TabView 通过按 Tab Item 返回选项卡的根视图

当我使用 navigationLinks \xe2\x80\x93 深入视图 \xe2\x80\x93 时,我无法通过点击 TabItem 返回到应用程序的根视图,因此如果我点击“所有汽车” ”选项卡并再次点击“主页”,它将显示该视图的最后状态。

\n

如何重置视图以显示初始状态?

\n
TabView(selection: $selectedTab) {\n  HomeView()\n  .tabItem {\n    if(selectedTab == 0) {\n      Image("home_active")\n        .frame(height: 28)\n    } else {\n      Image("home_inactive")\n        .frame(height: 28)\n    }\n\n    Text("HOME")\n  }.tag(0)\n\n  NavigationView {\n    CarsView()\n  }\n  .navigationBarHidden(true)\n  .tabItem {\n    if(selectedTab == 1) {\n      Image("cars_active")\n    } else {\n      Image("cars_inactive")\n    }\n    Text("ALL Cars").foregroundColor(.white)\n  }.tag(1)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

xcode swiftui swiftui-navigationlink

5
推荐指数
0
解决办法
766
查看次数

使用 NavigationLink isActive 时视图之间的动画不起作用

我从 UIKit 转到 SwiftUI,但在呈现新视图时遇到了 NavigationLink 没有动画的问题。

当以下属性非零时,我已设置视图结构以包含 NavigationLink:

@State private var retrievedDeviceIdentity: Proteus.DeviceIdentity?
Run Code Online (Sandbox Code Playgroud)

Proteus.DeviceIdentity 类型是一个基本数据结构。该属性由成功的异步闭包填充,而不是直接的用户交互。因此,视图结构的设置如下所示,使用 NavigationLink 的destination:isActive:label:初始化程序:

var body: some View {
    NavigationView {
        VStack {
            Form {
                // Form building
            }
            
            if let deviceIdentity = retrievedDeviceIdentity {
                NavigationLink(
                    destination: AddDeviceLinkDeviceForm(deviceIdentity: deviceIdentity),
                    isActive: .constant(retrievedDeviceIdentity != nil),
                    label: {
                        EmptyView()
                    }
                )
                .onDisappear() {
                    updateSyncButtonEnabledState()
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

retrievedDeviceIdentity填充为非零时,新视图确实会呈现。但是,没有幻灯片过渡到该视图;它会立即改变。在该新视图中时,点击后退按钮确实会幻灯片切换回该视图。

任何想法如何解决这一问题?由于我对 SwiftUI 还很陌生,如果我设置了错误的新结构,那么我也欢迎对此提供反馈。

(我在 macOS Big Sur 11.0.1 上使用 Xcode 12.3。)

animation swiftui swiftui-navigationlink

5
推荐指数
1
解决办法
1600
查看次数