簡體   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