bounty将在6天后过期。回答此问题可获得+50的声誉奖励。AdR正在寻找来自声誉良好来源的答案。
我想在列表的单元格中添加Menu
,但当我打开工作表视图时,这会导致奇怪的行为。我得到以下消息:
[演示]尝试演示〈* TtGC7SwiftUI29演示主机控制器VS_7任意视图 :0x1620b0800〉位于〈 TtGC7快速UI19UI托管控制器GVS_15修改的内容VS_7任何视图VS_12根修改符 _:0x161811800〉(来自〈 TtGC7快速UI19UI托管控制器GVS_15修改内容VS_7任何视图VS_12根修改符 *_:0x161811800〉),该控件已经显示〈_UIContextMenuActionsOnly视图控制器:0x16051de40〉中指定的地址。
我觉得工作表视图想和菜单同时打开。我该如何解决这个问题?
下面是说明我的问题的示例代码:
struct Item: Identifiable{
let id: Int
let marque: String
let reference: String
}
struct ContentView: View {
@State var items = [Item(id: 1, marque: "Schneider", reference: "123333"), Item(id: 2, marque: "Siemens", reference: "1234444"), Item(id: 3, marque: "Beck", reference: "1233"), Item(id: 4, marque: "Aron", reference: "133449")]
@State private var selectedItem: Item?
var body: some View {
List {
ForEach(items, id: \.id) { item in
HStack {
Text(item.marque)
Spacer()
Menu(content: {
Button("Edit") {}
Button("Delete") {}
}, label: {
Image(systemName: "ellipsis.circle")
})
}
.onTapGesture {
self.selectedItem = item
}
}
}
.sheet(item: $selectedItem) { item in
VStack{
Text(item.marque)
Text(item.reference)
}
}
}
}
1条答案
按热度按时间but5z9lq1#
是,工作表尝试与菜单同时显示,因为
HStack
上有TapGesture
,HStack
包含row
和Menu
。幕后发生了什么?:-
1.当我们点击椭圆(
Menu
)时,SwiftUI将尝试显示菜单。1.但是,由于我们也有
Tap Gesture
超过Row
,它将更新selectedItem
到项目。1.当
selectedItem
更新时,由于它绑定到工作表,SwiftUI也将尝试呈现工作表。1.并且在控制台中打印错误日志:
“Attempt to present which is already presenting”
。它告诉你,作为Self
,它已经呈现了一个Menu
,因此不能呈现工作表。为了解决这个问题,我们来更新我们的视图树。我们将保持文本和菜单在不同的堆栈,只添加手势到文本(
Row
)。这样点击
Menu
将不会更新selectedItem
属性。