struct ContentView: View { @State var newPersonName: String = "" @State var participants: [String] = [ "Jim", "Jonas" ] @State var newPlayer = "" @State var editingNewPlayer = false var body: some View { VStack(alignment: .leading, spacing: 16) { ForEach(participants, id: \.self) { participant in Text(participant) .padding(.trailing) Divider() } Button(action: handleNewPlayerEntry, label: { TextField("New Player", text: $newPlayer)$newPersonName, onEditingChanged: { edit in editingNewPlayer = $0 }edit }, onCommit: handleNewPlayerEntry) }) if editingNewPlayer { Button(action: handleNewPlayerEntry, label: { TextField("New Player", text: $newPlayer$newPersonName) { edit in editingNewPlayer = false } }) } } .padding(.leading) .frame(maxHeight: .infinity, alignment: .top) .transition(.opacity) .animation(.easeIn) } func handleNewPlayerEntry() { if( newPersonName.count > 0) { withAnimation(.spring()) { participants.append(newPersonName) newPersonName = "" editingNewPlayer = false } } } } struct ContentView: View { @State var newPersonName: String = "" @State var participants: [String] = [ "Jim", "Jonas" ] @State var newPlayer = "" @State var editingNewPlayer = false var body: some View { VStack(alignment: .leading, spacing: 16) { ForEach(participants, id: \.self) { participant in Text(participant) .padding(.trailing) Divider() } Button(action: handleNewPlayerEntry, label: { TextField("New Player", text: $newPlayer) { editingNewPlayer = $0 } }) if editingNewPlayer { Button(action: handleNewPlayerEntry, label: { TextField("New Player", text: $newPlayer) { editingNewPlayer = false } }) } } .padding(.leading) .frame(maxHeight: .infinity, alignment: .top) .transition(.opacity) .animation(.easeIn) } func handleNewPlayerEntry() { if(newPersonName.count > 0) { withAnimation(.spring()) { participants.append(newPersonName) newPersonName = "" } } } } struct ContentView: View { @State var newPersonName: String = "" @State var participants: [String] = [ "Jim", "Jonas" ] @State var editingNewPlayer = false var body: some View { VStack(alignment: .leading, spacing: 16) { ForEach(participants, id: \.self) { participant in Text(participant) .padding(.trailing) Divider() } Button(action: handleNewPlayerEntry, label: { TextField("New Player", text: $newPersonName, onEditingChanged: { edit in editingNewPlayer = edit }, onCommit: handleNewPlayerEntry) }) if editingNewPlayer { Button(action: handleNewPlayerEntry, label: { TextField("New Player", text: $newPersonName) { edit in editingNewPlayer = false } }) } } .padding(.leading) .frame(maxHeight: .infinity, alignment: .top) .transition(.opacity) .animation(.easeIn) } func handleNewPlayerEntry() { if newPersonName.count > 0 { withAnimation(.spring()) { participants.append(newPersonName) newPersonName = "" editingNewPlayer = false } } } } Is that approaching what you're attempting to build ?
struct ContentView: View { @State var newPersonName: String = "" @State var participants: [String] = [ "Jim", "Jonas" ] @State var newPlayer = "" @State var editingNewPlayer = false var body: some View { VStack(alignment: .leading, spacing: 16) { ForEach(participants, id: \.self) { participant in Text(participant) .padding(.trailing) Divider() } Button(action: handleNewPlayerEntry, label: { TextField("New Player", text: $newPlayer) { editingNewPlayer = $0 } }) if editingNewPlayer { Button(action: handleNewPlayerEntry, label: { TextField("New Player", text: $newPlayer) { editingNewPlayer = false } }) } } .padding(.leading) .frame(maxHeight: .infinity, alignment: .top) .transition(.opacity) .animation(.easeIn) } func handleNewPlayerEntry() { if(newPersonName.count > 0) { withAnimation(.spring()) { participants.append(newPersonName) newPersonName = "" } } } } lang-swift