添加手势后SwiftUI TextField不起作用

Posted

技术标签:

【中文标题】添加手势后SwiftUI TextField不起作用【英文标题】:SwiftUI TextField does not work after adding gesture 【发布时间】:2020-11-03 21:32:30 【问题描述】:

将组合手势添加到视图后,当我点击视图内的 TextField 以更改文本时,它将不再响应。我在添加自定义组合手势后发现了这一点 - 在拖动之前我使用长按开始操作。 (注意:如果只添加了一个拖动手势,事情仍然有效。不确定这两种情况有什么特别不同。)

组合手势:

let combined = longPressGesture.simultaneously(with: dragGesture)

手势被添加到视图中:

.gesture(combined)

【问题讨论】:

【参考方案1】:

我通过将 onTapGesture 添加到 TextField 来完成工作。不必在行动中投入任何东西。似乎是一种副作用,其行为可能会在未来发生变化。如果这有意义或其他处理方式,请感谢任何 cmets。

TextField(“Enter Text”, text: $myText)
                        .textFieldStyle(RoundedBorderTextFieldStyle())
                        .onTapGesture 

【讨论】:

更新:我有一个水平滚动视图内的文本字段。发现我在 ScrollView 中还有其他一些东西也没有“正确”响应。而是将“空” .onTapGesture 添加到 ScrollView 内的 HStack。然后可以从 ScrollView/HStack 中的单个项目中删除它 - 并使代码更清晰。【参考方案2】:

如果在拖动手势时遇到此问题,您可以设置 minimumDistance。这仍然会在文本字段上注册点击以对其进行编辑。

DragGesture(minimumDistance: 30, coordinateSpace: .global)

Adding a drag gesture in SwiftUI to a View inside a ScrollView blocks the scrolling

【讨论】:

以上是关于添加手势后SwiftUI TextField不起作用的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - navigationBarBackButtonHidden - 向后滑动手势?

自定义 TextField 在 SwiftUI 代码中的 VStack 中不起作用

在 SwiftUI 中向 TextField/SecureField 添加图像,向占位符文本添加填充

SwiftUI:提交后留在同一个 TextField 上?

SwiftUI:如何将 TextField 高度动态更改为阈值,然后允许滚动?

是否可以在 SwiftUI 中为 TextField 添加字距调整?