Highlight a specific part of the text in SwiftUI

后端 未结 3 1925
遇见更好的自我
遇见更好的自我 2020-12-21 10:38

Hello I\'m new to Swift and am using SwiftUI for my project where I download some weather data and I display it in the ContentView().

I would like to highlight some

3条回答
  •  Happy的楠姐
    2020-12-21 11:29

    If that requires just simple word styling then here is possible solution.

    Tested with Xcode 11.4 / iOS 13.4

    struct ContentView: View {
        let testo : String = "There is a thunderstorm in the area. Added some testing long text to demo that wrapping works correctly!"
    
    
        var body: some View {
            hilightedText(str: testo, searched: "thunderstorm")
                .multilineTextAlignment(.leading)
        }
    
        func hilightedText(str: String, searched: String) -> Text {
            guard !str.isEmpty && !searched.isEmpty else { return Text(str) }
    
            var result: Text!
            let parts = str.components(separatedBy: searched)
            for i in parts.indices {
                result = (result == nil ? Text(parts[i]) : result + Text(parts[i]))
                if i != parts.count - 1 {
                    result = result + Text(searched).bold()
                }
            }
            return result ?? Text(str)
        }
    }
    

    Note: below is previously used function, but as commented by @Lkabo it has limitations on very long strings

    func hilightedText(str: String) -> Text {
        let textToSearch = "thunderstorm"
        var result: Text!
    
        for word in str.split(separator: " ") {
            var text = Text(word)
            if word == textToSearch {
                text = text.bold()
            }
            result = (result == nil ? text : result + Text(" ") + text)
        }
        return result ?? Text(str)
    }
    

提交回复
热议问题