繁体   English   中英

如何在 SwiftUI 文本视图中为特定单词添加 onTapGesture 和下划线?

[英]How to add onTapGesture AND underline to specific word in a SwiftUI Text view?

我需要在 SwiftUI 视图的一段文本中制作一个特定的带下划线的单词。

目前我的 onTapGesture 适用于整个段落,但我只需要在Text(labelOne) (也称为 Action)上使用它。

我不能在 Text(labelOne) 上使用onTapGesture AND.underline,因为如果将 underline() 放在 onTapGesture {} 下或“无法转换值如果我将 onTapGesture{} 放在 underline() 下,则将类型为“某些视图”的预期参数类型为“文本”

在这种情况下,我结合了文本视图,文本(“动作”)+文本(“第一句结束。”)+文本(“正文”)所以这就是阻止我将.onTapGesture与.underline()结合起来的原因

最好在段落内使用 Button 以便用户获得按下 Action 的视觉反馈,但不确定如果不将其与文本分开是否可行?

在此处输入图像描述

如果将 Text 放在 HStack 中(这将允许我将 add.underline() &.onTapGesture{} 添加到特定视图),如果 Text(labelTwo) 的句子增长,它看起来很糟糕,见下文

在此处输入图像描述

struct TextView: View {
    let labelOne: String = "Action"
    let labelTwo: String = "end of first sentence."
    let text: String = "Begining of second sentence lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem"
    
    var body: some View {
        HStack {
            Text(labelOne) // <- Needs to be tappable, solely.
                .underline()
            + Text(" \(labelTwo) ")
            + Text(text)
        }
        .onTapGesture { // <- Applies to whole paragraph (BAD)
            print("Action pressed")
        }
    }
}

你可以分三步解决这个问题:

首先,为您的应用定义自定义 URL 方案,例如

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLName</key>
            <string>com.example.myapp</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>myappurl</string>
            </array>
        </dict>
    </array>

这可以在目标的信息选项卡中完成: 在此处输入图像描述

其次,将您的第一个文本更改为使用 Markdown,使用Action作为链接文本和使用新定义的 URL 方案的 url,例如

Text("[\(labelOne)](myappurl://action)").underline()

最后,添加.onOpenURL修饰符。 当您点击该链接时,该应用程序将尝试自行打开,并且可以通过此修饰符进行处理。

HStack {
    Text("[\(labelOne)](myappurl://action)").underline() +
    Text(" \(labelTwo) ") +
    Text(text)
}.onOpenURL { link in

    // do whatever action you want on tapping the link


}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM