C'est un peu une modification pour le La réponse de @jfk nous pouvons créer une extension pour view
pour simplifier le code modificateur à l'intérieur de la vue principale et il peut également être utilisé pour Text
y Image
.
struct PlaceHolder<T: View>: ViewModifier {
var placeHolder: T
var show: Bool
func body(content: Content) -> some View {
ZStack(alignment: .leading) {
if show { placeHolder }
content
}
}
}
extension View {
func placeHolder<T:View>(_ holder: T, show: Bool) -> some View {
self.modifier(PlaceHolder(placeHolder:holder, show: show))
}
}
Utilisation dans TextField :
Ajoutez cette ligne de code .placeHolder(Text("Your placeholder"), show: text.isEmpty)
en tant que viewModifier
a TextField
.
TextField("", text: $text, onEditingChanged: { (changing) in
print("Changing: \(changing)")
}, onCommit: {
print("Committed!")
})
.placeHolder(Text("Your placeholder"), show: text.isEmpty)
Utilisation en image :
De plus, comme @EmilioPelaez suggéré, j'ai modifié le code pour supporter le placeholder pour n'importe quelle vue par exemple. Image
comme ci-dessous.
Image("your_image")
.placeHolder(Image("placeholder_image"), show: true)