【发布时间】:2023-01-19 06:32:02
【问题描述】:
我需要在将通过 UIHostingController 在 UIKit 应用程序中使用的 SwiftUI 视图中的段落中创建一个可点击和带下划线的特定词。
我已经尝试过 .onOpenURL { } / 自定义 URL 方法和这个不管用在我的例子中,因为它会在我们应用程序的 UIKIT 端产生副作用,并且在传递 UIKit ViewController 中定义的函数时出现错误“发送到实例的无法识别的选择器......”
我找到了一个解决方法,通过将 onTapGesture 应用于包含文本的 HStack 来使整个段落可点击,但这并不理想......
有什么方法可以使用 Swift 的 AttributedString 使特定单词可点击或调用特定函数吗?
我也尝试过各种在 HStack 中制作 Text 的方法,但是如果将不同长度/单词组合传递给视图,结果永远不会产生统一的段落......
我也尝试将 .onTapGesture 添加到 HStack 中的特定文本视图,但出现错误...
错误**无法将“某些视图”类型的值转换为预期的参数类型“文本”
是否有不使用 .onOpenURL 的纯 SwiftUI 解决方案来使段落中的单个单词可点击?
是否可以将 AttributedString 与 .onTapGesture 结合使用来调用函数?
使用具有不同字符串长度的 HStack 组合的错误结果
**
private struct Paragraph: View {
let actionLabel: String = "Action" // <- Underlined tappable word
let actionLabelSecondary: String = "end of first sentence."
let textBody: String = "Beginning of second sentence lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum"
var body: some View {
HStack {
Text(actionLabel)
.underline()
.onTapGesture { // <- Cannot convert value of type 'some View' to expected argument type 'Text'
action()
}
+ Text(" \(actionLabelSecondary) ")
+ Text(textBody)
}
}
func action() {
print("Word tapped")
}
}
【问题讨论】:
标签: swiftui