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