如何解决SwiftUI [Presentation] / 尝试在 ... 上展示 View
我正在开发一个 SwiftUI 应用程序,首先出现警告,然后出现错误,可能是因为我忽略了这些警告。我想展示我收到的警告,我希望有人能指出我可能做错的地方。
相关代码如下:
struct CustomListView: View {
var localList:[SomeManagedobject],moc:NSManagedobjectContext
@State var showingOtherView = false
func handleCustomItem(_ argument: SomeManagedobject) {
print(#function)
self.showingOtherView.toggle()
..... Do useful things .....
}
var body: some View {
List {
ForEach(self.localList) {
item in
HStack {
Spacer()
Button(action: {
self.handleCustomItem(item)
})
{
Text(item.expression!)
.foregroundColor(Color.red))
.font(.headline)
.padding(.horizontal,11).padding(.vertical,15)
}.sheet(isPresented: $showingOtherView) {
OtherView()
}
Spacer()
}
}
}
}
}
这是OtherView的代码:
import SwiftUI
import CoreData
struct OtherView: View {
var body: some View {
Text("Hello OtherView")
}
}
当我单击列表中的一个按钮并执行 handleCustomItem() 函数时,我可以在调试控制台中看到这些消息:
handleCustomItem(_:) 2021-04-20 22:53:10.667895+0900 TheApp[9600:5758072] [Presentation] 尝试呈现 TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView: 0x10529a510> 上 TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView: 0x10510a310>(来自 TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView: 0x10510a310>) 已经呈现 TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView: 0x105299150>。 2021-04-20 22:53:10.668399+0900 TheApp[9600:5758072] [演示] 尝试演示 TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView: 0x10529b1b0> 上 TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView: 0x10510a310>(来自 TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView: 0x10510a310>) 已经呈现 TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView: 0x105299150>。 ..... 2021-04-20 22:53:10.670049+0900 TheApp[9600:5758072] [Presentation] 尝试呈现 TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView: 0x105118e10> 上 TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView: 0x10510a310>(来自 TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView: 0x10510a310>) 已经呈现 TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView: 0x105299150>.
如果有人能看到一些东西并提示我可以做什么,那就太好了。
解决方法
您的 .sheet(isPresented: $showingOtherView) {
在 ForEach
内。当您将 showingOtherView
设置为 true 时,ForEach
中的所有工作表都将尝试呈现。这是一大堆床单。
你想把它放在 ForEach
之外。
var body: some View {
List {
ForEach(self.localList) {
item in
HStack {
Spacer()
Button(action: {
self.handleCustomItem(item)
})
{
Text(item.expression!)
.foregroundColor(Color.red))
.font(.headline)
.padding(.horizontal,11).padding(.vertical,15)
}
Spacer()
}
}
}
.sheet(isPresented: $showingOtherView) { /// here should be fine
OtherView()
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。