如何将 ContextMenu 与 NavigationLink 一起使用?

Posted

技术标签:

【中文标题】如何将 ContextMenu 与 NavigationLink 一起使用?【英文标题】:How to use a ContextMenu with a NavigationLink? 【发布时间】:2020-12-19 17:00:16 【问题描述】:

我有一个 NavigationLink 附加了 .contextMenu 修饰符。请注意,NavigationLink 位于 ForEach 内部,LazyHStack 位于 ScrollView 内部。 (我正在创建一个水平滚动的“卡片”行,就像许多 Apple 应用程序一样。)

现在,导航和上下文菜单都可以工作了;如果我单击一下,它会导航到我指定的视图,如果我长按它会显示一个上下文菜单。 问题在于,由于导航链接突出显示,上下文菜单集中在突出显示的灰色视图上。

我考虑通过视图修饰符删除导航链接的突出显示,但无济于事。灰色突出显示仍适用于上下文菜单视图。

.onAppear 
    UITableViewCell.appearance().selectionStyle = .none
    UITableView.appearance().allowsSelection = false

那么,我怎样才能有一个既可以在点击时导航的视图,又可以在触发长按手势时提供一个专注于该视图的上下文菜单?请注意,我没有尝试在ContextMenu 中有一个NavigationLink(似乎有很多问题在问);我正在尝试将ContextMenu 附加到NavigationLink

【问题讨论】:

【参考方案1】:

根据提供的描述,我假设解决方案是通过点击以编程方式激活NavigationLink,例如(伪代码):

Card()
  .onTapGesture 
     activeCard = item
  
  .contextMenu 
     // ...
  
  .background(
     NavigationLink(destination: SomeView(), tag: item, selection: $activeCard) 
       EmptyView()
     
  )

完整示例请参见下一个https://***.com/a/58898046/12299030。

【讨论】:

您好,我知道有一个类似的解决方案,尽管我觉得它有点 hacky。不久前,我实际上刚刚找到了一个解决方案here,它可以完成我想要的(通过应用自定义样式——PlainButtonStyle 似乎不起作用)。编辑:我看到您也提供了其他解决方案(对我来说更可取)。向你致敬。 )) 可能的替代...没有提供的代码很难猜测。

以上是关于如何将 ContextMenu 与 NavigationLink 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

WPF ContextMenu 文本对齐

SwiftUI:contextMenu 菜单

是否可以在 VS2015 Live Visual Tree 中查看 ContextMenu 的实时属性?

如何在 SwiftUI 中将 DatePicker 放入 ContextMenu

WPF:如何设置或禁用 TextBox 的默认 ContextMenu

如何在 ContextMenu 中使用 MenuItem.setIntent()