macOS 13中NavigationSplitView下.onDeleteCommand失效问题求助
开发macOS 13应用时,使用新版NavigationSplitView遇到问题:原本能正常响应的.onDeleteCommand(perform:)逻辑,放入NavigationSplitView后完全失效——当焦点选中目标视图时,按下DELETE键或点击菜单栏「Edit > Delete」无任何反应,且「Edit > Delete」选项处于不可点击状态。
正常工作的测试代码
单独使用时,3个可通过TAB键选中的矩形能正确响应.onDeleteCommand:按下DELETE键或点击菜单栏删除选项,矩形会在原色与白色间切换,代码如下:
VStack { Rectangle() .fill((isColorDeleted.contains(.blue) ? Color.white : Color.blue)) .padding() .focusable() .focused($focusedColor, equals: .blue) Rectangle() .fill((isColorDeleted.contains(.red) ? Color.white : Color.red)) .padding() .focusable() .focused($focusedColor, equals: .red) Rectangle() .fill((isColorDeleted.contains(.yellow) ? Color.white : Color.yellow)) .padding() .focusable() .focused($focusedColor, equals: .yellow) } .onDeleteCommand { if let focusedColor { if !isColorDeleted.contains(focusedColor) { isColorDeleted.append(focusedColor) } else { let idx = isColorDeleted.firstIndex(of: focusedColor)! isColorDeleted.remove(at: idx) } } }
放入NavigationSplitView后失效的代码
将上述视图放入NavigationSplitView的detail列后,删除逻辑完全失效,代码如下:
NavigationSplitView(columnVisibility: $visibility) { List { Text("Main page") } } detail: { VStack { Rectangle() .fill((isColorDeleted.contains(.blue) ? Color.white : Color.blue)) .padding() .focusable() .focused($focusedColor, equals: .blue) Rectangle() .fill((isColorDeleted.contains(.red) ? Color.white : Color.red)) .padding() .focusable() .focused($focusedColor, equals: .red) Rectangle() .fill((isColorDeleted.contains(.yellow) ? Color.white : Color.yellow)) .padding() .focusable() .focused($focusedColor, equals: .yellow) } .onDeleteCommand { if let focusedColor { if !isColorDeleted.contains(focusedColor) { isColorDeleted.append(focusedColor) } else { let idx = isColorDeleted.firstIndex(of: focusedColor)! isColorDeleted.remove(at: idx) } } } }
内容的提问来源于stack exchange,提问作者MaxAuMax
相关产品推荐
相关产品推荐

