簡體   English   中英

在 SwiftUI 中更改文本顏色

[英]Change Text color on tap in SwiftUI

我通過以下方式在 SwiftUI 中定義了一個Text List

...
var myString: [CustomString]
...

ScrollViewReader { value in
            List {
                ForEach(Array(zip(myString, myString.indices)), id: \.0) { eachString, index in
                        Text(eachString.text)
                            .foregroundColor(.gray)
                            .onTapGesture {
                                self.foregroundColor(.black) // <- this doesn't work
                                // code
                            }
                    }
                
            }
}

每當用戶點擊它時,我需要能夠更改特定 TextView 的foregroundColor顏色。

CustomString是我定義的符合 Hashable 的Hashable 我不能讓它同時符合ObservableObject ,這意味着我不能在onTapGesture塊內更改它的值。

我也無法從循環中刪除index ,因為我也需要它。

TIA。

不要把它看成個人的,只要記住 Stackoverflow 是開發人員之間共享的好方法,但所有基礎知識在 Apple 的文檔和示例中都更加清晰。 順便說一句,他們做得非常好。

https://developer.apple.com/tutorials/swiftui

對於你的問題,你必須用你的顏色聲明一個 state 變量,所以當顏色改變時,視圖會重新生成。

我沒有測試你的代碼,因為你沒有提供復制/粘貼准備運行操場或查看 class,但你看到了原理。

可以肯定的是,如果您需要每個文本單元格獨立更新,您應該制作一個“TextCell”子視圖或其他任何具有它自己顏色的子視圖。 不在最高級別。 在您的代碼中,我假設所有單元格都將獲得相同的顏色,因為它是在列表的頂層定義的。

新年快樂:)

...
@State var color: Color = .gray

var myString: [CustomString]
...

ScrollViewReader { value in
    List {
        ForEach(Array(zip(myString, myString.indices)), id: \.0) { eachString, index in
        Text(eachString.text)
        .foregroundColor(color)
        .onTapGesture {
            self.color = .black
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM