Last active
October 22, 2020 14:08
-
-
Save 1dolinski/87a2579662fa316d56e72f4b60b200fa to your computer and use it in GitHub Desktop.
On TextField select, all tab views re-render
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import SwiftUI | |
import CoreData | |
struct ContentView: View { | |
@Environment(\.managedObjectContext) private var viewContext | |
@ObservedObject var viewModel1: ViewModel = ViewModel() | |
@ObservedObject var viewModel2: ViewModel = ViewModel() | |
@ObservedObject var viewModel3: ViewModel = ViewModel() | |
@ObservedObject var viewModel4: ViewModel = ViewModel() | |
var body: some View { | |
TabView { | |
SimpleView(viewModel: self.viewModel1, people: viewModel1.people, num: 1) | |
.tabItem { | |
Text("1") | |
}.onAppear{ | |
print("tab 1 appear") | |
viewModel1.getPeople(num: 1) | |
} | |
SimpleView(viewModel: self.viewModel2, people: viewModel2.people, num: 2) | |
.tabItem { | |
Text("2") | |
}.onAppear{ | |
print("tab 2 appear") | |
viewModel2.getPeople(num: 2) | |
} | |
SimpleView(viewModel: self.viewModel3, people: viewModel3.people, num: 3) | |
.tabItem { | |
Text("3") | |
}.onAppear{ | |
print("tab 3 appear") | |
viewModel3.getPeople(num: 3) | |
} | |
SimpleView(viewModel: self.viewModel4, people: viewModel4.people, num: 4) | |
.tabItem { | |
Text("4") | |
}.onAppear{ | |
print("tab 4 appear") | |
viewModel4.getPeople(num: 4) | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import SwiftUI | |
struct SimpleView: View { | |
@State var text: String = "" | |
@State var viewModel: ViewModel | |
var people: [Person] | |
var num: Int | |
var body: some View { | |
VStack { | |
TextField("Enter text", text: self.$text) | |
ForEach(viewModel.people) { person in | |
Text(person.name) | |
} | |
}.onAppear { | |
print("\(num) simple view appear") | |
viewModel.getPeople(num: num) | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ALTERNATIVE CONTENT VIEW TAB SELECTION OPTION | |
/* 1 simple view appear | |
1 get people | |
4 simple view appear | |
4 get people | |
tapped tab 4 | |
2 simple view appear | |
2 get people | |
3 simple view appear | |
3 get people | |
*/ | |
import SwiftUI | |
import CoreData | |
struct ContentView: View { | |
@Environment(\.managedObjectContext) private var viewContext | |
@State private var selectedTab = 1 | |
@ObservedObject var viewModel1: ViewModel = ViewModel() | |
@ObservedObject var viewModel2: ViewModel = ViewModel() | |
@ObservedObject var viewModel3: ViewModel = ViewModel() | |
@ObservedObject var viewModel4: ViewModel = ViewModel() | |
var body: some View { | |
TabView(selection: $selectedTab) { | |
SimpleView(viewModel: viewModel1, people: viewModel1.people, num: 1) | |
.onTapGesture { | |
self.selectedTab = 1 | |
print("tapped tab 1") | |
} | |
.tabItem { | |
Image(systemName: "star") | |
Text("1") | |
} | |
.tag(1) | |
SimpleView(viewModel: viewModel2, people: viewModel2.people, num: 2) | |
.onTapGesture { | |
self.selectedTab = 2 | |
print("tapped tab 2") | |
} | |
.tabItem { | |
Image(systemName: "star") | |
Text("2") | |
} | |
.tag(2) | |
SimpleView(viewModel: viewModel3, people: viewModel3.people, num: 3) | |
.onTapGesture { | |
self.selectedTab = 3 | |
print("tapped tab 3") | |
} | |
.tabItem { | |
Image(systemName: "star") | |
Text("3") | |
} | |
.tag(3) | |
SimpleView(viewModel: viewModel4, people: viewModel4.people, num: 4) | |
.onTapGesture { | |
self.selectedTab = 4 | |
print("tapped tab 4") | |
} | |
.tabItem { | |
Image(systemName: "star") | |
Text("4") | |
} | |
.tag(4) | |
}.ignoresSafeArea(.keyboard, edges: .bottom) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
struct Person: Identifiable, Equatable { | |
let id = UUID() | |
let name: String | |
} | |
class ViewModel: ObservableObject { | |
@Published var people: [Person] = [] | |
func getPeople(num: Int) { | |
print("\(num) get people") | |
DispatchQueue.main.async { | |
let person = Person(name: "Hank \(num)") | |
self.people.append(person) | |
} | |
} | |
} |
Added TabSelectionContentView.swift to show tab number condition implementation, similarly the views and vm render on text field focus
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Flow
Result: