【问题标题】:How to switch to another view by each element's onTapGesture of a list in SwiftUI?如何通过SwiftUI中列表的每个元素的onTapGesture切换到另一个视图?
【发布时间】:2020-04-25 13:45:05
【问题描述】:

我尝试在列表中添加导航视图,如下所示。但是说Result of 'NavigationView<Content>' initializer is unused 是行不通的

var body: some View {
    GeometryReader { geometry in
        VStack {
            List {
                ForEach(self.allItems){ item in
                    TaskRow(item: item)
                    .onTapGesture {
                        // TODO: switch to another view                       
                        NavigationView {
                            VStack {
                                Text("Hello World")
                                NavigationLink(destination: AnotherView()) {
                                    Text("Do Something")
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

AnotherView 是一个 SwiftUI 文件,如下所示:

import SwiftUI

struct AnotherView: View {
    var body: some View {
        VStack{
            Text("Hello, World!")
        }
    }
}

struct AnotherView_Previews: PreviewProvider {
    static var previews: some View {
        AnotherView()
    }
}

我已经在stackoverflow Switching Views With Observable Objects in SwiftUISwiftUI Change View with Button 中尝试过解决方案。它们在我的情况下都不起作用。

如何通过 SwiftUI 中列表的 onTapGesture 切换到另一个视图,如下所示:

var body: some View {
    GeometryReader { geometry in
        VStack {
            List {
                ForEach(self.allItems){ item in
                    TaskRow(item: item)
                    .onTapGesture {
                        // TODO: switch to another view                       
                        AnotherView()
                    }
                }
            }
        }
    }
}

【问题讨论】:

  • 点击手势不是为了显示视图,而是为了更改模型或值。

标签: ios swift swiftui


【解决方案1】:

你必须将整个身体放入NavigationView

示例

struct Item: Identifiable {
  let id = UUID()
  let name: String
}

struct ContentView: View {
  var body: some View {
    NavigationView {
      List {
        ForEach([Item(name: "A"), Item(name: "B")]) { value in
          NavigationLink(destination: X(item: value)) {
            Text(value.name)
          }
        }
      }
    }
  }
}

struct X: View {
  let item: Item

  var body: some View {
    Text(item.name)
  }
}

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 2022-11-19
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多