SwiftUI fullScreenCover 无详细信息
SwiftUI fullScreenCover no Detail
我需要帮助。我希望详细视图显示在 fullScreenCover 上,下面的代码不起作用。
通过 RowView 从“dataList”创建一个模板。
使用 NavigationLink 它可以工作。
使用 fullScreenCover 这在这里不起作用,数据仅静态显示而不是动态显示。
在此先感谢您的任何建议。
我创建了一个简单的示例项目来重现该问题。这是代码:
import SwiftUI
struct Data: Identifiable {
var id = UUID()
var title: String
var titleSecondScreen: String
}
let dataList = [
Data(title: "Test1", titleSecondScreen: "Second1"),
Data(title: "Test2", titleSecondScreen: "Second2"),
Data(title: "Test3", titleSecondScreen: "Second3"),
Data(title: "Test4", titleSecondScreen: "Second4"),
Data(title: "Test5", titleSecondScreen: "Second5"),
]
struct ContentView: View {
let list: Data
@State private var fullScreen = false
@State var selectedData: Data
var body: some View {
ForEach(dataList) { value in
Button {
fullScreen.toggle()
selectedData = value
} label: {
Text(value.title)
.padding()
}
}
.fullScreenCover(isPresented: $fullScreen) {
fullScreenView(list: dataList[0])
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(list: dataList[0], selectedData: dataList[0])
}
}
struct fullScreenView: View {
let list: Data
@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Text(list.titleSecondScreen)
.padding()
Button {
presentationMode.wrappedValue.dismiss()
} label: {
Text("Closed FullScreen")
}
}
}
}
struct fullScreenView_Previews: PreviewProvider {
static var previews: some View {
fullScreenView(list: dataList[0])
}
}
这里是 Github Link: enter link description here
您可以使用 fullScreen(item:)
版本将所选项目发送到 FullScreenView
。
struct MyData: Identifiable {
var id = UUID()
var title: String
var titleSecondScreen: String
}
let dataList = [
MyData(title: "Test1", titleSecondScreen: "Second1"),
MyData(title: "Test2", titleSecondScreen: "Second2"),
MyData(title: "Test3", titleSecondScreen: "Second3"),
MyData(title: "Test4", titleSecondScreen: "Second4"),
MyData(title: "Test5", titleSecondScreen: "Second5"),
]
struct ContentView: View {
@State private var selectedData: MyData?
var body: some View {
ForEach(dataList) { value in
Button {
selectedData = value
} label: {
Text(value.title)
.padding()
}
}
.fullScreenCover(item: $selectedData) { item in
FullScreenView(item: item)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct FullScreenView: View {
let item: MyData
@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Text(item.titleSecondScreen)
.padding()
Button {
presentationMode.wrappedValue.dismiss()
} label: {
Text("Close FullScreen")
}
}
}
}
我还做了一些其他的小改动:
- 使用标准 Swift 类型名称的大写
- 避免使用
Data
类型,因为它与正常的 Swift Data
类型冲突
- 删除 ContentView 中未使用的
list
参数
我需要帮助。我希望详细视图显示在 fullScreenCover 上,下面的代码不起作用。 通过 RowView 从“dataList”创建一个模板。 使用 NavigationLink 它可以工作。 使用 fullScreenCover 这在这里不起作用,数据仅静态显示而不是动态显示。 在此先感谢您的任何建议。 我创建了一个简单的示例项目来重现该问题。这是代码:
import SwiftUI
struct Data: Identifiable {
var id = UUID()
var title: String
var titleSecondScreen: String
}
let dataList = [
Data(title: "Test1", titleSecondScreen: "Second1"),
Data(title: "Test2", titleSecondScreen: "Second2"),
Data(title: "Test3", titleSecondScreen: "Second3"),
Data(title: "Test4", titleSecondScreen: "Second4"),
Data(title: "Test5", titleSecondScreen: "Second5"),
]
struct ContentView: View {
let list: Data
@State private var fullScreen = false
@State var selectedData: Data
var body: some View {
ForEach(dataList) { value in
Button {
fullScreen.toggle()
selectedData = value
} label: {
Text(value.title)
.padding()
}
}
.fullScreenCover(isPresented: $fullScreen) {
fullScreenView(list: dataList[0])
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(list: dataList[0], selectedData: dataList[0])
}
}
struct fullScreenView: View {
let list: Data
@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Text(list.titleSecondScreen)
.padding()
Button {
presentationMode.wrappedValue.dismiss()
} label: {
Text("Closed FullScreen")
}
}
}
}
struct fullScreenView_Previews: PreviewProvider {
static var previews: some View {
fullScreenView(list: dataList[0])
}
}
这里是 Github Link: enter link description here
您可以使用 fullScreen(item:)
版本将所选项目发送到 FullScreenView
。
struct MyData: Identifiable {
var id = UUID()
var title: String
var titleSecondScreen: String
}
let dataList = [
MyData(title: "Test1", titleSecondScreen: "Second1"),
MyData(title: "Test2", titleSecondScreen: "Second2"),
MyData(title: "Test3", titleSecondScreen: "Second3"),
MyData(title: "Test4", titleSecondScreen: "Second4"),
MyData(title: "Test5", titleSecondScreen: "Second5"),
]
struct ContentView: View {
@State private var selectedData: MyData?
var body: some View {
ForEach(dataList) { value in
Button {
selectedData = value
} label: {
Text(value.title)
.padding()
}
}
.fullScreenCover(item: $selectedData) { item in
FullScreenView(item: item)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct FullScreenView: View {
let item: MyData
@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Text(item.titleSecondScreen)
.padding()
Button {
presentationMode.wrappedValue.dismiss()
} label: {
Text("Close FullScreen")
}
}
}
}
我还做了一些其他的小改动:
- 使用标准 Swift 类型名称的大写
- 避免使用
Data
类型,因为它与正常的 SwiftData
类型冲突 - 删除 ContentView 中未使用的
list
参数