swift - NavigationLink + Text.onTapGesture 碰撞
问题描述
这个问题是,当单击 NavigationLink 视图中的文本时,onTapGesture 获得优先级并忽略 NavigationLink。我试过了simultaneousGesture
,但仍然有问题。
这是 NavigationView/List/NavigationLink 的代码:
NavigationView {
List {
ForEach(gameStore.games) { game in
NavigationLink(destination: EmojiMemoryGameView(viewModel: game)
.navigationBarTitle(self.gameStore.name(for: game))
) {
EmojiThemeEditorView(game: game, isEditing: self.editMode.isEditing)
}
}
.onDelete { indexSet in
indexSet.map { self.gameStore.games[$0] }
.forEach { game in
self.gameStore.removeGameTheme(game)
}
}
}
.navigationBarTitle(self.gameStore.name)
.navigationBarItems(
leading: Button(action: {
self.gameStore.addGameTheme()
}, label: {
Image(systemName: "plus").imageScale(.large)
}),
trailing: EditButton()
)
.environment(\.editMode, $editMode)
这是EmojiThemeEditorView
's 的主体:
var body: some View {
Text(game.theme.themeName).foregroundColor(game.theme.colorToUse).font(.largeTitle)
// .simultaneousGesture(TapGesture().onEnded { // tried this and did not work
.onTapGesture {
if (isEditing) {
self.showThemeEditor = true
}
}
.popover(isPresented: $showThemeEditor) {
EmojiThemeEditorOptionView(isShowing: $showThemeEditor).environmentObject(self.game.theme)
}
}
基本上,单击文本不会转换到 NavigationLink。这是一个例子:
有关解决此问题的最佳方法的任何想法?
解决方案
我也遇到过类似的导航链接不稳定的问题。我将导航链接视为不应出现在列表中的东西并依靠 isActive 标志来触发它们,这是我取得了最大的成功。
这是一个关于如何使用 isActive 的好教程:
https://www.hackingwithswift.com/articles/216/complete-guide-to-navigationview-in-swiftui
我怀疑将您的 navigationLinks 更改为按钮,在您的视图中创建一个 NavigationLink,并让您的 onTapGesture 更改游戏的状态对象并更改 isActive 的 Bool 将起作用。这是一个奇怪的范例,与 html 链接非常不同。
关键是
var body: some View {
@State var emojiView = false
NavigationLink(“”, destination: EmojiMemoryGameView(viewModel: game), isActive: self.$emojiView)
如果您更改 onTapGesture 中的 self.emojiView 和同一位置的游戏变量,它应该会将您导航到链接。希望这是有道理的。
推荐阅读
- java - Selenide + Junit 5 assertionMode = SOFT 不起作用
- linux-kernel - Linux内核:读写锁rwlock(死锁)的不理解行为
- jquery - 图片库按钮不会淡出,图像消失
- python - 在 PyCharm 中从某个时间点开始重新运行代码
- php - 如何使整个确认按钮成为 laravel 控制器中 sweetalert2 中的链接
- c# - 使用 uwp 应用程序在两个 Windows 设备之间通过 wifi 共享文件
- jquery - 在最后一张幻灯片之后单击屏幕右侧的第 1 个/在第 2 个幻灯片之后的第 1 个中单击屏幕左侧
- python - 将奇怪的 json 文件读入 pandas
- vim - vim的CA的奇怪行为?
- azure - 具有共享 azure arm 模板的多个项目