[英]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.