如何在NavigationLink中使用上下文菜单(ContextMenu)?

4

我有一个带有.contextMenu修饰符的NavigationLink。请注意,NavigationLink位于ForEach内部,而ForEach又位于LazyHStack内部,后者又位于ScrollView内部。(我正在创建一个类似许多 Apple 应用程序的水平滚动"卡片"行。)

现在,导航和上下文菜单都可以正常工作;如果我单击它,它会导航到我指定的视图,如果我长按它,它会呈现一个上下文菜单。问题是由于导航链接高亮显示,上下文菜单聚焦于一个灰色高亮的视图。

问题截图

我考虑使用视图修饰符取消导航链接的高亮显示,但无济于事。灰色高亮仍适用于上下文菜单视图。

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

那么我怎样才能使一个视图既可以在轻触时进行导航,又可以在长按手势触发时呈现聚焦于该视图的上下文菜单呢?请注意,我并不试图在ContextMenu内部放置NavigationLink(许多问题似乎都在问这个),我想要的是将ContextMenu附加到NavigationLink上。

1个回答

2

根据提供的描述,我认为解决方案将是在点击时以编程方式激活NavigationLink,例如(伪代码):

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

请参考下面的完整示例:https://dev59.com/aVMH5IYBdhLWcg3woQjQ#58898046

你好,我知道有一个类似的解决方案,但对我来说感觉有点hacky。刚才我在这里找到了一个解决方案(https://dev59.com/cbvoa4cB1Zd3GeqP5olY#62311089),可以实现我想要的效果(通过应用自定义样式--`PlainButtonStyle`似乎不起作用)。编辑:我看到另一个解决方案(对我来说更可取)也是由您提供的。向您致敬。 - user1234
没有提供代码,很难猜测是否有可能提供替代方案。 - Asperi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接