将 `onLongPressGesture` 添加到 SwiftUI 文本视图可防止滚动?

问题描述 投票:0回答:1

在我正在开发的多平台 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 vertical-scrolling uilongpressgesturerecognizer
1个回答
0
投票

SwiftUI 目前只有很少的修饰符可以让你摆弄滚动视图的内置手势识别器。我脑子里唯一能想到的是

presentationContentInteraction
,这在这里是无关紧要的。

如果您的目标只是允许用户复制整个

Text
,您可以使用
textSelection
:

Text("some text")
    .textSelection(.enabled)

请注意,macOS 上的行为与 iOS 上的行为不同:

在 macOS 上,人们使用鼠标或触控板选择一系列文本,然后可以通过选择“编辑”>“复制”或使用标准键盘快捷键来快速复制文本。

在 iOS 上,使用该应用程序的人触摸并按住可选择的

Text
视图,该视图会弹出一个系统菜单,其中包含适合当前上下文的菜单项。这些菜单项对
Text
视图的全部内容进行操作;用户无法像在 macOS 上那样选择一系列文本。

© www.soinside.com 2019 - 2024. All rights reserved.