Je veux changer la couleur de l'espace réservé du TextField, mais je ne trouve pas de méthode pour cela.
J'ai essayé de définir foregroundColor
et accentColor
, mais cela ne change pas la couleur de l'espace réservé.
Voici le code:
TextField("Placeholder", $text)
.foregroundColor(Color.red)
.accentColor(Color.green)
Peut-être qu'il n'y a pas encore d'API pour cela?
Il n'y a pas encore d'api pour ça. MAIS VOUS POUVEZ:
Utilisez ZStack
et implémentez vous-même un espace réservé:
var body: some View {
ZStack(alignment: .leading) {
if text.isEmpty { Text("Placeholder").foregroundColor(.red) }
TextField("", text: $text)
}
}
Maintenant, vous pouvez utiliser n'importe quel type d'édition comme un boss.
Vous pouvez toujours créer vos propres View
s personnalisés à utiliser partout:
struct CustomTextField: View {
var placeholder: Text
@Binding var text: String
var editingChanged: (Bool)->() = { _ in }
var commit: ()->() = { }
var body: some View {
ZStack(alignment: .leading) {
if text.isEmpty { placeholder }
TextField("", text: $text, onEditingChanged: editingChanged, onCommit: commit)
}
}
}
utilisation (TextField
avec espace réservé):
struct ContentView: View {
@State var text = ""
var body: some View {
CustomTextField(
placeholder: Text("placeholder").foregroundColor(.red),
text: $text
)
}
}
Finalement, un ViewModifier qui incorpore le contenu dans un ZStack est plus élégant et moins de code:
public struct PlaceholderStyle: ViewModifier {
var showPlaceHolder: Bool
var placeholder: String
public func body(content: Content) -> some View {
ZStack(alignment: .leading) {
if showPlaceHolder {
Text(placeholder)
.padding(.horizontal, 15)
}
content
.foregroundColor(Color.white)
.padding(5.0)
}
}
}
Usage:
TextField("", text: $data)
.modifier(PlaceholderStyle(showPlaceHolder: data.isEmpty,
placeholder: "My Placeholder"))