在我正在开发的多平台 SwiftUI 应用程序中,我在滚动视图中嵌入了一个文本视图。我想在文本视图中添加长按手势,让用户将内容复制到剪贴板。
当我这样做时,当您按下内容并拖动时,iOS 版本不再滚动文本。下面是有问题的代码。有没有办法同时支持滚动和长按手势识别器?
(在 UIKit 中,你可以让手势识别器仅在其他识别器失败时才触发。我怀疑长按手势识别器正在拦截触摸事件并阻止 ScrollView 获取它。)
ScrollView() {
// MARK: Resuts word list
Text(anagramsState.wordList)
.lineLimit(nil)
.multilineTextAlignment(.leading)
.frame(minWidth: geometry.size.width - 2, minHeight: 20, alignment: .topLeading)
.onLongPressGesture {
if copyTextToClipboard(anagramsState.wordList) {
anagramsState.statusMessage = "Results copied to clipboard."
} else {
anagramsState.statusMessage = "Long press ignored."
}
}
}
SwiftUI 目前只有很少的修饰符可以让你摆弄滚动视图的内置手势识别器。我脑子里唯一能想到的是
presentationContentInteraction
,这在这里是无关紧要的。
如果您的目标只是允许用户复制整个
Text
,您可以使用 textSelection
:
Text("some text")
.textSelection(.enabled)
请注意,macOS 上的行为与 iOS 上的行为不同:
在 macOS 上,人们使用鼠标或触控板选择一系列文本,然后可以通过选择“编辑”>“复制”或使用标准键盘快捷键来快速复制文本。
在 iOS 上,使用该应用程序的人触摸并按住可选择的
视图,该视图会弹出一个系统菜单,其中包含适合当前上下文的菜单项。这些菜单项对Text
视图的全部内容进行操作;用户无法像在 macOS 上那样选择一系列文本。Text