From faee9f2636b4506392961db9395d10259e4fc62e Mon Sep 17 00:00:00 2001 From: Tori Lew Date: Wed, 27 Sep 2023 00:14:26 -0700 Subject: [PATCH] In-Class Activity --- .../project.pbxproj | 28 ++++++ .../UserInterfaceState.xcuserstate | Bin 0 -> 57387 bytes .../xcschemes/xcschememanagement.plist | 14 +++ .../ContentView.swift | 33 ++++-- .../DisplayTextField.swift | 24 +++++ .../EnvironmentObjectView.swift | 70 +++++++++++++ .../InClassActivity.swift | 95 ++++++++++++++++++ .../RandomBackgroundColor.swift | 46 +++++++++ .../StateAndBinding.swift | 34 +++++++ .../StateObjectandObservedObject.swift | 70 +++++++++++++ .../toggleView.swift | 19 ++++ 11 files changed, 427 insertions(+), 6 deletions(-) create mode 100644 ProIPhone_Ch07_SharingDataBetweenStructures.xcodeproj/project.xcworkspace/xcuserdata/student.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ProIPhone_Ch07_SharingDataBetweenStructures.xcodeproj/xcuserdata/student.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 ProIPhone_Ch07_SharingDataBetweenStructures/DisplayTextField.swift create mode 100644 ProIPhone_Ch07_SharingDataBetweenStructures/EnvironmentObjectView.swift create mode 100644 ProIPhone_Ch07_SharingDataBetweenStructures/InClassActivity.swift create mode 100644 ProIPhone_Ch07_SharingDataBetweenStructures/RandomBackgroundColor.swift create mode 100644 ProIPhone_Ch07_SharingDataBetweenStructures/StateAndBinding.swift create mode 100644 ProIPhone_Ch07_SharingDataBetweenStructures/StateObjectandObservedObject.swift create mode 100644 ProIPhone_Ch07_SharingDataBetweenStructures/toggleView.swift diff --git a/ProIPhone_Ch07_SharingDataBetweenStructures.xcodeproj/project.pbxproj b/ProIPhone_Ch07_SharingDataBetweenStructures.xcodeproj/project.pbxproj index 9bcc1fd..763a3a0 100644 --- a/ProIPhone_Ch07_SharingDataBetweenStructures.xcodeproj/project.pbxproj +++ b/ProIPhone_Ch07_SharingDataBetweenStructures.xcodeproj/project.pbxproj @@ -7,18 +7,32 @@ objects = { /* Begin PBXBuildFile section */ + 3FFCF0EB2AD603530030C7B6 /* InClassActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FFCF0EA2AD603530030C7B6 /* InClassActivity.swift */; }; + 3FFCF0ED2AD606F00030C7B6 /* toggleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FFCF0EC2AD606F00030C7B6 /* toggleView.swift */; }; E4554F8B2AC3E9CA00644AB6 /* ProIPhone_Ch07_SharingDataBetweenStructuresApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4554F8A2AC3E9CA00644AB6 /* ProIPhone_Ch07_SharingDataBetweenStructuresApp.swift */; }; E4554F8D2AC3E9CA00644AB6 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4554F8C2AC3E9CA00644AB6 /* ContentView.swift */; }; E4554F8F2AC3E9CE00644AB6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E4554F8E2AC3E9CE00644AB6 /* Assets.xcassets */; }; E4554F922AC3E9CE00644AB6 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E4554F912AC3E9CE00644AB6 /* Preview Assets.xcassets */; }; + E4554F992AC3EB0C00644AB6 /* RandomBackgroundColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4554F982AC3EB0C00644AB6 /* RandomBackgroundColor.swift */; }; + E4554F9B2AC3EDD600644AB6 /* StateAndBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4554F9A2AC3EDD600644AB6 /* StateAndBinding.swift */; }; + E4554F9D2AC3EE8F00644AB6 /* DisplayTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4554F9C2AC3EE8F00644AB6 /* DisplayTextField.swift */; }; + E4554F9F2AC3FF2C00644AB6 /* StateObjectandObservedObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4554F9E2AC3FF2C00644AB6 /* StateObjectandObservedObject.swift */; }; + E4554FA12AC403B000644AB6 /* EnvironmentObjectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4554FA02AC403B000644AB6 /* EnvironmentObjectView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 3FFCF0EA2AD603530030C7B6 /* InClassActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InClassActivity.swift; sourceTree = ""; }; + 3FFCF0EC2AD606F00030C7B6 /* toggleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = toggleView.swift; sourceTree = ""; }; E4554F872AC3E9CA00644AB6 /* ProIPhone_Ch07_SharingDataBetweenStructures.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ProIPhone_Ch07_SharingDataBetweenStructures.app; sourceTree = BUILT_PRODUCTS_DIR; }; E4554F8A2AC3E9CA00644AB6 /* ProIPhone_Ch07_SharingDataBetweenStructuresApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProIPhone_Ch07_SharingDataBetweenStructuresApp.swift; sourceTree = ""; }; E4554F8C2AC3E9CA00644AB6 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; E4554F8E2AC3E9CE00644AB6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; E4554F912AC3E9CE00644AB6 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + E4554F982AC3EB0C00644AB6 /* RandomBackgroundColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RandomBackgroundColor.swift; sourceTree = ""; }; + E4554F9A2AC3EDD600644AB6 /* StateAndBinding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StateAndBinding.swift; sourceTree = ""; }; + E4554F9C2AC3EE8F00644AB6 /* DisplayTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayTextField.swift; sourceTree = ""; }; + E4554F9E2AC3FF2C00644AB6 /* StateObjectandObservedObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StateObjectandObservedObject.swift; sourceTree = ""; }; + E4554FA02AC403B000644AB6 /* EnvironmentObjectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnvironmentObjectView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -53,6 +67,13 @@ children = ( E4554F8A2AC3E9CA00644AB6 /* ProIPhone_Ch07_SharingDataBetweenStructuresApp.swift */, E4554F8C2AC3E9CA00644AB6 /* ContentView.swift */, + E4554F982AC3EB0C00644AB6 /* RandomBackgroundColor.swift */, + E4554F9A2AC3EDD600644AB6 /* StateAndBinding.swift */, + E4554F9C2AC3EE8F00644AB6 /* DisplayTextField.swift */, + E4554F9E2AC3FF2C00644AB6 /* StateObjectandObservedObject.swift */, + E4554FA02AC403B000644AB6 /* EnvironmentObjectView.swift */, + 3FFCF0EA2AD603530030C7B6 /* InClassActivity.swift */, + 3FFCF0EC2AD606F00030C7B6 /* toggleView.swift */, E4554F8E2AC3E9CE00644AB6 /* Assets.xcassets */, E4554F902AC3E9CE00644AB6 /* Preview Content */, ); @@ -137,8 +158,15 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E4554F9D2AC3EE8F00644AB6 /* DisplayTextField.swift in Sources */, E4554F8D2AC3E9CA00644AB6 /* ContentView.swift in Sources */, + 3FFCF0ED2AD606F00030C7B6 /* toggleView.swift in Sources */, E4554F8B2AC3E9CA00644AB6 /* ProIPhone_Ch07_SharingDataBetweenStructuresApp.swift in Sources */, + E4554F992AC3EB0C00644AB6 /* RandomBackgroundColor.swift in Sources */, + E4554F9B2AC3EDD600644AB6 /* StateAndBinding.swift in Sources */, + E4554F9F2AC3FF2C00644AB6 /* StateObjectandObservedObject.swift in Sources */, + 3FFCF0EB2AD603530030C7B6 /* InClassActivity.swift in Sources */, + E4554FA12AC403B000644AB6 /* EnvironmentObjectView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ProIPhone_Ch07_SharingDataBetweenStructures.xcodeproj/project.xcworkspace/xcuserdata/student.xcuserdatad/UserInterfaceState.xcuserstate b/ProIPhone_Ch07_SharingDataBetweenStructures.xcodeproj/project.xcworkspace/xcuserdata/student.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..e54f7d0baee555573050d9937acd7598de2a9160 GIT binary patch literal 57387 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 R{y)Ec{eS-1|KaHB{|C~;9Z3KH literal 0 HcmV?d00001 diff --git a/ProIPhone_Ch07_SharingDataBetweenStructures.xcodeproj/xcuserdata/student.xcuserdatad/xcschemes/xcschememanagement.plist b/ProIPhone_Ch07_SharingDataBetweenStructures.xcodeproj/xcuserdata/student.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..fe73645 --- /dev/null +++ b/ProIPhone_Ch07_SharingDataBetweenStructures.xcodeproj/xcuserdata/student.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + ProIPhone_Ch07_SharingDataBetweenStructures.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/ProIPhone_Ch07_SharingDataBetweenStructures/ContentView.swift b/ProIPhone_Ch07_SharingDataBetweenStructures/ContentView.swift index 29cf608..3baf936 100644 --- a/ProIPhone_Ch07_SharingDataBetweenStructures/ContentView.swift +++ b/ProIPhone_Ch07_SharingDataBetweenStructures/ContentView.swift @@ -7,15 +7,36 @@ import SwiftUI +import SwiftUI + struct ContentView: View { var body: some View { - VStack { - Image(systemName: "globe") - .imageScale(.large) - .foregroundColor(.accentColor) - Text("Hello, world!") + TabView { + RandomBackgroundColor() + .tabItem { + Image(systemName: "1.circle") + } + + StateAndBindingView() + .tabItem { + Image(systemName: "2.circle") + } + + StateObjectandObservedObject() + .tabItem { + Image(systemName: "3.circle") + } + EnvironmentObjectView() + .tabItem { + Image(systemName: "4.circle") + } + InClassActivity() + .tabItem { + Image(systemName: "5.circle") + } } - .padding() + .tabViewStyle(DefaultTabViewStyle()) + } } diff --git a/ProIPhone_Ch07_SharingDataBetweenStructures/DisplayTextField.swift b/ProIPhone_Ch07_SharingDataBetweenStructures/DisplayTextField.swift new file mode 100644 index 0000000..4e27912 --- /dev/null +++ b/ProIPhone_Ch07_SharingDataBetweenStructures/DisplayTextField.swift @@ -0,0 +1,24 @@ +// +// DisplayTextField.swift +// ProIPhone_Ch07_SharingDataBetweenStructures +// +// Created by Mike Panitz on 9/26/23. +// + +import SwiftUI + +struct DisplayTextField: View { + @Binding var newVariable: String + var body: some View { + HStack { + Text("Send a greeting:") + TextField("Type a message here", text: $newVariable) + } + } +} + +struct DisplayTextField_Previews: PreviewProvider { + static var previews: some View { + DisplayTextField(newVariable: .constant("")) + } +} diff --git a/ProIPhone_Ch07_SharingDataBetweenStructures/EnvironmentObjectView.swift b/ProIPhone_Ch07_SharingDataBetweenStructures/EnvironmentObjectView.swift new file mode 100644 index 0000000..2933f5d --- /dev/null +++ b/ProIPhone_Ch07_SharingDataBetweenStructures/EnvironmentObjectView.swift @@ -0,0 +1,70 @@ +// +// EnvironmentObject.swift +// ProIPhone_Ch07_SharingDataBetweenStructures +// +// Created by Mike Panitz on 9/26/23. +// + +import SwiftUI + +// class AnimalModel: ObservableObject { +// This is the same as the prior example, so we reuse that code + +import SwiftUI +struct EnvironmentObjectView: View { + @StateObject var cat = AnimalModel() + var body: some View { + VStack { + Text("EnvironmentObject Example") + .font(.largeTitle) + Spacer() + VStack { + Text("Hello, \(cat.name)") + Text("Breed: \(cat.breed)") + Text("Age: \(Int(cat.age))") + Text("Weight: \(cat.weight)") + } + .padding(50) + .background(Color.yellow) + .cornerRadius(20) + Spacer() + DisplayAnimal_ViaEnvObj() + .padding(50) + .background(Color.yellow) + .cornerRadius(20) + Spacer() + } + .padding() + .environmentObject(cat) + } +} + +struct DisplayAnimal_ViaEnvObj: View { + @EnvironmentObject var creature: AnimalModel + var body: some View { + VStack { + HStack { + Text("Name:") + TextField("Type a name here", text: $creature.name) + } + HStack { + Text("Breed:") + TextField("Type a breed here", text: $creature.breed) + } + HStack { + Text("Age:") + Slider(value: $creature.age, in: 0...20) + } + HStack { + Text("Weight:") + Slider(value: $creature.weight, in: 0...200) + } + } + } +} + +struct EnvironmentObject_Previews: PreviewProvider { + static var previews: some View { + EnvironmentObjectView(cat: AnimalModel()) + } +} diff --git a/ProIPhone_Ch07_SharingDataBetweenStructures/InClassActivity.swift b/ProIPhone_Ch07_SharingDataBetweenStructures/InClassActivity.swift new file mode 100644 index 0000000..b3dcb72 --- /dev/null +++ b/ProIPhone_Ch07_SharingDataBetweenStructures/InClassActivity.swift @@ -0,0 +1,95 @@ +// +// BackgroundColorView.swift +// ProIPhone_Ch07_SharingDataBetweenStructures +// +// Created by Student Account on 10/10/23. +// + +import SwiftUI + +struct InClassActivity: View { + @State private var darkMode: Bool = false + @StateObject private var student = Student() + @StateObject private var course = Course() + var body: some View { + VStack{ + toggleView(mode: $darkMode) + .padding(50) + .cornerRadius(20) + + + VStack{ + HStack{ + Text("Student: ") + Text(student.first) + Text(student.last) + } + .padding(.bottom) + Text("Course: ") + Text(course.courseTitle) + HStack{ + Text(course.area) + Text(String(course.courseNumber)) + } + HStack{ + Text(course.quarter) + Text(String(course.year)) + } + } + .padding(50) + .cornerRadius(20) + EditClasses(student: student, course: course) + .padding(50) + .cornerRadius(20) + .background(darkMode ? Color(.white): Color(.gray)) + .foregroundColor(darkMode ? Color(.black): Color(.white)) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + .background(darkMode ? Color(.gray): Color(.white)) + .foregroundColor(darkMode ? Color(.white): Color(.black)) + } +} + +#Preview { + InClassActivity() +} +struct EditClasses: View { + @ObservedObject var student: Student + @ObservedObject var course: Course + var body: some View { + VStack { + HStack { + Text("First Name:") + TextField("Type a name here", text: $student.first) + } + HStack { + Text("Last Name:") + TextField("Type a breed here", text: $student.last) + } + TextField("Course Title", text: $course.courseTitle) + HStack{ + TextField("Area", text: $course.area) + TextField("Course Number", value: $course.courseNumber, formatter: NumberFormatter()) + } + HStack{ + TextField("Quarter", text: $course.quarter) + TextField("Year", value: $course.year, formatter: NumberFormatter()) + } + } + .environmentObject(student) + .environmentObject(course) + } +} + +class Student: ObservableObject{ + @Published var first: String = "Jane" + @Published var last: String = "Doe" +} + +class Course: ObservableObject{ + @Published var year: Int = 2023 + @Published var quarter: String = "Fall" + @Published var area: String = "IT-MOB" + @Published var courseNumber: Int = 382 + @Published var courseTitle: String = "iOS App Development II" +} diff --git a/ProIPhone_Ch07_SharingDataBetweenStructures/RandomBackgroundColor.swift b/ProIPhone_Ch07_SharingDataBetweenStructures/RandomBackgroundColor.swift new file mode 100644 index 0000000..d0d3176 --- /dev/null +++ b/ProIPhone_Ch07_SharingDataBetweenStructures/RandomBackgroundColor.swift @@ -0,0 +1,46 @@ +// +// RandomBackgroundColor.swift +// ProIPhone_Ch07_SharingDataBetweenStructures +// +// Created by Mike Panitz on 9/26/23. +// + +import SwiftUI + + +struct RandomBackgroundColor: View { + @State private var backgroundColor = Color.white + + var body: some View { + ZStack { + backgroundColor.edgesIgnoringSafeArea(.all) + + VStack { + Text("Random Background Color") + .font(.largeTitle) + .padding() + + Button(action: { + // Generate a random color + let red = Double.random(in: 0...1) + let green = Double.random(in: 0...1) + let blue = Double.random(in: 0...1) + self.backgroundColor = Color(red: red, green: green, blue: blue) + }) { + Text("Change Color") + .font(.headline) + .foregroundColor(.white) + .padding() + .background(Color.blue) + .cornerRadius(10) + } + } + } + } +} + +struct RandomBackgroundColor_Previews: PreviewProvider { + static var previews: some View { + RandomBackgroundColor() + } +} diff --git a/ProIPhone_Ch07_SharingDataBetweenStructures/StateAndBinding.swift b/ProIPhone_Ch07_SharingDataBetweenStructures/StateAndBinding.swift new file mode 100644 index 0000000..fe66520 --- /dev/null +++ b/ProIPhone_Ch07_SharingDataBetweenStructures/StateAndBinding.swift @@ -0,0 +1,34 @@ +// +// StateAndBinding.swift +// ProIPhone_Ch07_SharingDataBetweenStructures +// +// Created by Mike Panitz on 9/26/23. +// + +import SwiftUI +struct StateAndBindingView: View { + @State private var message = "" + var body: some View { + VStack { + Text("State and Binding") + .font(.largeTitle) + Spacer() + Text("Hello, \(message)") + .padding(50) + .background(Color.yellow) + .cornerRadius(20) + Spacer() + DisplayTextField(newVariable: $message) + .padding(50) + .background(Color.yellow) + .cornerRadius(20) + Spacer() + } + .padding(20) + } +} +struct StateAndBindingView_Previews: PreviewProvider { + static var previews: some View { + StateAndBindingView() + } +} diff --git a/ProIPhone_Ch07_SharingDataBetweenStructures/StateObjectandObservedObject.swift b/ProIPhone_Ch07_SharingDataBetweenStructures/StateObjectandObservedObject.swift new file mode 100644 index 0000000..d95221c --- /dev/null +++ b/ProIPhone_Ch07_SharingDataBetweenStructures/StateObjectandObservedObject.swift @@ -0,0 +1,70 @@ +// +// StateObjectandObservedObject.swift +// ProIPhone_Ch07_SharingDataBetweenStructures +// +// Created by Mike Panitz on 9/26/23. +// + +import SwiftUI + +class AnimalModel: ObservableObject { + @Published var name: String = "" + @Published var breed: String = "" + @Published var age: Double = 0.0 + @Published var weight: Double = 0.0 +} + +struct StateObjectandObservedObject: View { + @StateObject var cat = AnimalModel() + var body: some View { + VStack { + Text("StateObject and ObservedObject") + .font(.largeTitle) + Spacer() + VStack { + Text("Hello, \(cat.name)") + Text("Breed: \(cat.breed)") + Text("Age: \(Int(cat.age))") + Text("Weight: \(cat.weight)") + } + .padding(50) + .background(Color.yellow) + .cornerRadius(20) + Spacer() + DisplayAnimal(creature: cat) + .padding(50) + .background(Color.yellow) + .cornerRadius(20) + Spacer() + }.padding() + } +} +struct StateObjectandObservedObject_Previews: PreviewProvider { + static var previews: some View { + StateObjectandObservedObject() + } +} + +struct DisplayAnimal: View { + @ObservedObject var creature: AnimalModel + var body: some View { + VStack { + HStack { + Text("Name:") + TextField("Type a name here", text: $creature.name) + } + HStack { + Text("Breed:") + TextField("Type a breed here", text: $creature.breed) + } + HStack { + Text("Age:") + Slider(value: $creature.age, in: 0...20) + } + HStack { + Text("Weight:") + Slider(value: $creature.weight, in: 0...200) + } + } + } +} diff --git a/ProIPhone_Ch07_SharingDataBetweenStructures/toggleView.swift b/ProIPhone_Ch07_SharingDataBetweenStructures/toggleView.swift new file mode 100644 index 0000000..3242012 --- /dev/null +++ b/ProIPhone_Ch07_SharingDataBetweenStructures/toggleView.swift @@ -0,0 +1,19 @@ +// +// toggleView.swift +// ProIPhone_Ch07_SharingDataBetweenStructures +// +// Created by Student Account on 10/10/23. +// + +import SwiftUI + +struct toggleView: View { + @Binding var mode: Bool + var body: some View { + Toggle("Dark Mode", isOn: $mode) + } +} + +#Preview { + toggleView(mode: .constant(false)) +}