#swift #swiftui #uitextfield #swiftui-form
#быстрый #swiftui #uitextfield uitextfield #swiftui-форма
Вопрос:
Я создаю приложение, которое использует форму в SwiftUI, и я хотел бы редактировать объекты, хранящиеся локально, используя указанные формы.
В этом случае у меня есть торт и печенье, которые должны храниться в памяти, и у меня есть две структуры, одна для торта и одна для печенья.
Когда пользователь выбирает, что он / она хочет отредактировать, торт или печенье, поля формы должны автоматически заполняться свойствами фактически сохраненного торта или печенья, которые можно редактировать.
Структуры:
import Foundation
struct Cake {
var name : String
var style : String
var decorations : String
}
struct Cookie{
var name : String
var style : String
}
Код, который я использую для представления:
import SwiftUI
struct EditingForm: View {
@State var cake : Cake = Cake(name: "Caprese", style: "Chocolate cake made with almonds flour", decorations: "Powdered Sugar")
@State var cookie : Cookie = Cookie(name: "Chocolate Chip", style: "Cookie made with chocolate chips")
@State var group : String = "Cake"
@State var nameCake : String = ""
@State var nameCookie : String = ""
@State var styleCake : String = ""
@State var cookiesChocolateChipsType : String = ""
var body: some View {
ZStack{
Form{
Section(header: Text("Sweet Details")
){
Menu("Select the sweet you want to edit") {
Button(action: {
group = "Cake"
}) {
Text("Cake")
}.foregroundColor(.black)
Button(action: {
group = "Cookie"
}) {
Text("Cookie")
}
}
}
Section(header: Text("Decorations")
){
if(group == "Cake"){
TextField("Name of the cake", text: $nameCake)
TextField("Style of the cake", text: $styleCake)
} else if (group == "Cookie"){
TextField("Name of the cookie", text: $nameCookie)
TextField("Type of chocolate chips for the cookie", text: $cookiesChocolateChipsType)
}
}
}
}
}
}
Ответ №1:
Вы можете просто использовать .onAppear() {}
модификатор. Это означает, что ваш @State var получает обновление при появлении представления.
В вашем примере код будет выглядеть так:
import SwiftUI
struct EditingForm: View {
@State var cake : Cake = Cake(name: "Caprese", style: "Chocolate cake made with almonds flour", decorations: "Powdered Sugar")
@State var cookie : Cookie = Cookie(name: "Chocolate Chip", style: "Cookie made with chocolate chips")
@State var group : String = "Cake"
@State var nameCake : String = ""
@State var nameCookie : String = ""
@State var styleCake : String = ""
@State var cookiesChocolateChipsType : String = ""
var body: some View {
ZStack{
Form{
Section(header: Text("Sweet Details")
){
Menu("Select the sweet you want to edit") {
Button(action: {
group = "Cake"
}) {
Text("Cake")
}.foregroundColor(.black)
Button(action: {
group = "Cookie"
}) {
Text("Cookie")
}
}
}
Section(header: Text("Decorations")
){
if(group == "Cake"){
TextField("Name of the cake", text: $nameCake).onAppear() {
self.nameCake = self.cake.name
}
TextField("Style of the cake", text: $styleCake).onAppear() {
self.styleCake = self.cake.style
}
} else if (group == "Cookie"){
TextField("Name of the cookie", text: $nameCookie).onAppear() {
self.nameCookie = self.cookie.name
}
TextField("Type of chocolate chips for the cookie", text: $cookiesChocolateChipsType).onAppear() {
self.cookiesChocolateChipsType = self.cookie.style
}
}
}
}
}
}
}
Надеюсь, это поможет решить вашу проблему.
Комментарии:
1. возможно ли то же самое для webview в приложении SwiftUI?
2. @HumbleDeveloper01 Я не совсем понимаю, какое поведение вы имеете в виду. Не могли бы вы объяснить это немного подробнее или показать какие-либо примеры?
3. Я имею в виду, как мы можем использовать автозаполнение для WKWebView из SwiftUI login в view в webview login view?