![](/img/trans.png)
[英]How can I make these SwiftUI text “buttons” change color on tap?
[英]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.