Made small improvements like dismissing the keyboard. Tapping the Contacts tab causes the app to crash.
This commit is contained in:
parent
b77ef882e8
commit
5c4d4f8059
21 changed files with 174 additions and 36 deletions
|
|
@ -14,6 +14,10 @@
|
||||||
850F8018284A83400094580D /* FeaturesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850F8017284A83400094580D /* FeaturesView.swift */; };
|
850F8018284A83400094580D /* FeaturesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850F8017284A83400094580D /* FeaturesView.swift */; };
|
||||||
850F80202853F7790094580D /* LicenseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850F801F2853F7790094580D /* LicenseView.swift */; };
|
850F80202853F7790094580D /* LicenseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850F801F2853F7790094580D /* LicenseView.swift */; };
|
||||||
850F80222853F7E30094580D /* SecretView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850F80212853F7E30094580D /* SecretView.swift */; };
|
850F80222853F7E30094580D /* SecretView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850F80212853F7E30094580D /* SecretView.swift */; };
|
||||||
|
850F8027285437500094580D /* caleb.bost.duo.heic in Resources */ = {isa = PBXBuildFile; fileRef = 850F8023285437500094580D /* caleb.bost.duo.heic */; };
|
||||||
|
850F8028285437500094580D /* aiden.moore.states.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 850F8024285437500094580D /* aiden.moore.states.jpg */; };
|
||||||
|
850F8029285437500094580D /* isaac.greene.clouds.heic in Resources */ = {isa = PBXBuildFile; fileRef = 850F8025285437500094580D /* isaac.greene.clouds.heic */; };
|
||||||
|
850F802A285437500094580D /* jake.zimmerman.group.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 850F8026285437500094580D /* jake.zimmerman.group.jpg */; };
|
||||||
85AAA0D627FA2DD600F4B9A1 /* SplitsApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AAA0D527FA2DD600F4B9A1 /* SplitsApp.swift */; };
|
85AAA0D627FA2DD600F4B9A1 /* SplitsApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AAA0D527FA2DD600F4B9A1 /* SplitsApp.swift */; };
|
||||||
85AAA0D827FA2DD600F4B9A1 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AAA0D727FA2DD600F4B9A1 /* ContentView.swift */; };
|
85AAA0D827FA2DD600F4B9A1 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AAA0D727FA2DD600F4B9A1 /* ContentView.swift */; };
|
||||||
85AAA0DA27FA2DDA00F4B9A1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 85AAA0D927FA2DDA00F4B9A1 /* Assets.xcassets */; };
|
85AAA0DA27FA2DDA00F4B9A1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 85AAA0D927FA2DDA00F4B9A1 /* Assets.xcassets */; };
|
||||||
|
|
@ -31,6 +35,10 @@
|
||||||
850F8017284A83400094580D /* FeaturesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeaturesView.swift; sourceTree = "<group>"; };
|
850F8017284A83400094580D /* FeaturesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeaturesView.swift; sourceTree = "<group>"; };
|
||||||
850F801F2853F7790094580D /* LicenseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LicenseView.swift; sourceTree = "<group>"; };
|
850F801F2853F7790094580D /* LicenseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LicenseView.swift; sourceTree = "<group>"; };
|
||||||
850F80212853F7E30094580D /* SecretView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretView.swift; sourceTree = "<group>"; };
|
850F80212853F7E30094580D /* SecretView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretView.swift; sourceTree = "<group>"; };
|
||||||
|
850F8023285437500094580D /* caleb.bost.duo.heic */ = {isa = PBXFileReference; lastKnownFileType = file; name = caleb.bost.duo.heic; path = Assets.xcassets/caleb.bost.duo.heic; sourceTree = "<group>"; };
|
||||||
|
850F8024285437500094580D /* aiden.moore.states.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = aiden.moore.states.jpg; path = Assets.xcassets/aiden.moore.states.jpg; sourceTree = "<group>"; };
|
||||||
|
850F8025285437500094580D /* isaac.greene.clouds.heic */ = {isa = PBXFileReference; lastKnownFileType = file; name = isaac.greene.clouds.heic; path = Assets.xcassets/isaac.greene.clouds.heic; sourceTree = "<group>"; };
|
||||||
|
850F8026285437500094580D /* jake.zimmerman.group.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = jake.zimmerman.group.jpg; path = Assets.xcassets/jake.zimmerman.group.jpg; sourceTree = "<group>"; };
|
||||||
85AAA0D227FA2DD600F4B9A1 /* Splits.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Splits.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
85AAA0D227FA2DD600F4B9A1 /* Splits.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Splits.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
85AAA0D527FA2DD600F4B9A1 /* SplitsApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitsApp.swift; sourceTree = "<group>"; };
|
85AAA0D527FA2DD600F4B9A1 /* SplitsApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitsApp.swift; sourceTree = "<group>"; };
|
||||||
85AAA0D727FA2DD600F4B9A1 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
85AAA0D727FA2DD600F4B9A1 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
||||||
|
|
@ -83,6 +91,10 @@
|
||||||
85AAA0E527FA2EB100F4B9A1 /* ModalView.swift */,
|
85AAA0E527FA2EB100F4B9A1 /* ModalView.swift */,
|
||||||
850F801F2853F7790094580D /* LicenseView.swift */,
|
850F801F2853F7790094580D /* LicenseView.swift */,
|
||||||
85AAA0D927FA2DDA00F4B9A1 /* Assets.xcassets */,
|
85AAA0D927FA2DDA00F4B9A1 /* Assets.xcassets */,
|
||||||
|
850F8025285437500094580D /* isaac.greene.clouds.heic */,
|
||||||
|
850F8023285437500094580D /* caleb.bost.duo.heic */,
|
||||||
|
850F8026285437500094580D /* jake.zimmerman.group.jpg */,
|
||||||
|
850F8024285437500094580D /* aiden.moore.states.jpg */,
|
||||||
85AAA0DB27FA2DDA00F4B9A1 /* Preview Content */,
|
85AAA0DB27FA2DDA00F4B9A1 /* Preview Content */,
|
||||||
);
|
);
|
||||||
path = Splits;
|
path = Splits;
|
||||||
|
|
@ -162,6 +174,10 @@
|
||||||
files = (
|
files = (
|
||||||
85AAA0DD27FA2DDA00F4B9A1 /* Preview Assets.xcassets in Resources */,
|
85AAA0DD27FA2DDA00F4B9A1 /* Preview Assets.xcassets in Resources */,
|
||||||
85AAA0DA27FA2DDA00F4B9A1 /* Assets.xcassets in Resources */,
|
85AAA0DA27FA2DDA00F4B9A1 /* Assets.xcassets in Resources */,
|
||||||
|
850F802A285437500094580D /* jake.zimmerman.group.jpg in Resources */,
|
||||||
|
850F8028285437500094580D /* aiden.moore.states.jpg in Resources */,
|
||||||
|
850F8027285437500094580D /* caleb.bost.duo.heic in Resources */,
|
||||||
|
850F8029285437500094580D /* isaac.greene.clouds.heic in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@
|
||||||
<key>Splits.xcscheme_^#shared#^_</key>
|
<key>Splits.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>1</integer>
|
<integer>0</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SwiftRichString (Playground) 1.xcscheme</key>
|
<key>SwiftRichString (Playground) 1.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
|
|
|
||||||
21
Splits/Assets.xcassets/aiden.moore.states.imageset/Contents.json
vendored
Normal file
21
Splits/Assets.xcassets/aiden.moore.states.imageset/Contents.json
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "aiden.moore.states.jpg",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Splits/Assets.xcassets/aiden.moore.states.imageset/aiden.moore.states.jpg
vendored
Normal file
BIN
Splits/Assets.xcassets/aiden.moore.states.imageset/aiden.moore.states.jpg
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
BIN
Splits/Assets.xcassets/aiden.moore.states.jpg
Normal file
BIN
Splits/Assets.xcassets/aiden.moore.states.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
BIN
Splits/Assets.xcassets/caleb.bost.duo.heic
Normal file
BIN
Splits/Assets.xcassets/caleb.bost.duo.heic
Normal file
Binary file not shown.
21
Splits/Assets.xcassets/caleb.bost.duo.imageset/Contents.json
vendored
Normal file
21
Splits/Assets.xcassets/caleb.bost.duo.imageset/Contents.json
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "caleb.bost.duo.heic",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Splits/Assets.xcassets/caleb.bost.duo.imageset/caleb.bost.duo.heic
vendored
Normal file
BIN
Splits/Assets.xcassets/caleb.bost.duo.imageset/caleb.bost.duo.heic
vendored
Normal file
Binary file not shown.
BIN
Splits/Assets.xcassets/isaac.greene.clouds.heic
Normal file
BIN
Splits/Assets.xcassets/isaac.greene.clouds.heic
Normal file
Binary file not shown.
21
Splits/Assets.xcassets/isaac.greene.clouds.imageset/Contents.json
vendored
Normal file
21
Splits/Assets.xcassets/isaac.greene.clouds.imageset/Contents.json
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "isaac.greene.clouds.heic",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Splits/Assets.xcassets/isaac.greene.clouds.imageset/isaac.greene.clouds.heic
vendored
Normal file
BIN
Splits/Assets.xcassets/isaac.greene.clouds.imageset/isaac.greene.clouds.heic
vendored
Normal file
Binary file not shown.
21
Splits/Assets.xcassets/jake.zimmerman.group.imageset/Contents.json
vendored
Normal file
21
Splits/Assets.xcassets/jake.zimmerman.group.imageset/Contents.json
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "jake.zimmerman.group.jpg",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Splits/Assets.xcassets/jake.zimmerman.group.imageset/jake.zimmerman.group.jpg
vendored
Normal file
BIN
Splits/Assets.xcassets/jake.zimmerman.group.imageset/jake.zimmerman.group.jpg
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
BIN
Splits/Assets.xcassets/jake.zimmerman.group.jpg
Normal file
BIN
Splits/Assets.xcassets/jake.zimmerman.group.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
|
|
@ -17,11 +17,14 @@ struct June2022: View {
|
||||||
VStack (alignment: .leading) {
|
VStack (alignment: .leading) {
|
||||||
Text("2022-06-10")
|
Text("2022-06-10")
|
||||||
.font(.title2)
|
.font(.title2)
|
||||||
Text("Version 1.0.0 (LVSXT10a)\n")
|
Text("Version Release Candidate (LVSXT10a)\n")
|
||||||
.font(.footnote)
|
.font(.footnote)
|
||||||
Text("\u{2022} Got the conversion of paces to work, so a 5:00/km pace will also show as 8:03/mi\n\u{2022} This app is now considered \"Finished\" and will transition to Version Numbers")
|
Text("\u{2022} Got the conversion of paces to work, so a 5:00/km pace will also show as 8:03/mi\n\u{2022} This app is now considered \"Finished\" and will transition to Version Numbers\n\u{2022} FINALLY MADE A WAY TO DISMISS THE KEYBOARD\n\t\u{2022} (as with most of the other solutions I've had to use for other problems in this app, the fix was remarkably easy)\n\u{2022} Made several small quality-of-life improvements")
|
||||||
}
|
}
|
||||||
|
Spacer()
|
||||||
}
|
}
|
||||||
|
.padding(30)
|
||||||
|
|
||||||
//2022-06-09
|
//2022-06-09
|
||||||
HStack {
|
HStack {
|
||||||
VStack (alignment: .leading) {
|
VStack (alignment: .leading) {
|
||||||
|
|
@ -97,6 +100,8 @@ struct June2022: View {
|
||||||
}
|
}
|
||||||
.padding(30)
|
.padding(30)
|
||||||
}
|
}
|
||||||
|
.navigationTitle("June 2022 Log")
|
||||||
|
.navigationBarTitleDisplayMode(.inline)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -129,6 +134,8 @@ struct May2022: View {
|
||||||
}
|
}
|
||||||
.padding(30)
|
.padding(30)
|
||||||
}
|
}
|
||||||
|
.navigationTitle("May 2022 Log")
|
||||||
|
.navigationBarTitleDisplayMode(.inline)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -226,6 +233,8 @@ struct April2022: View {
|
||||||
}
|
}
|
||||||
.padding(30)
|
.padding(30)
|
||||||
}
|
}
|
||||||
|
.navigationTitle("April 2022 Log")
|
||||||
|
.navigationBarTitleDisplayMode(.inline)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -258,5 +267,7 @@ struct March2022: View {
|
||||||
}
|
}
|
||||||
.padding(30)
|
.padding(30)
|
||||||
}
|
}
|
||||||
|
.navigationTitle("March 2022 Log")
|
||||||
|
.navigationBarTitleDisplayMode(.inline)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import SwiftUI
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct ContentView: View {
|
struct ContentView: View {
|
||||||
|
@FocusState private var nameIsFocused: Bool
|
||||||
var SISystem = ["km","mi"]
|
var SISystem = ["km","mi"]
|
||||||
@State var timeHours: String = ""
|
@State var timeHours: String = ""
|
||||||
@State var timeMinutes: String = ""
|
@State var timeMinutes: String = ""
|
||||||
|
|
@ -18,11 +19,13 @@ struct ContentView: View {
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack {
|
VStack {
|
||||||
|
Spacer()
|
||||||
VStack {
|
VStack {
|
||||||
TextField("Enter distance here", text: $distance)
|
TextField("Enter distance here", text: $distance)
|
||||||
.padding()
|
.padding()
|
||||||
.keyboardType(.decimalPad)
|
.keyboardType(.decimalPad)
|
||||||
.textFieldStyle(.roundedBorder)
|
.textFieldStyle(.roundedBorder)
|
||||||
|
.focused($nameIsFocused)
|
||||||
}
|
}
|
||||||
VStack {
|
VStack {
|
||||||
Text("Unit of measurement:")
|
Text("Unit of measurement:")
|
||||||
|
|
@ -39,6 +42,7 @@ struct ContentView: View {
|
||||||
TextField("Enter hours here", text: $timeHours)
|
TextField("Enter hours here", text: $timeHours)
|
||||||
.keyboardType(.numberPad)
|
.keyboardType(.numberPad)
|
||||||
.textFieldStyle(.roundedBorder)
|
.textFieldStyle(.roundedBorder)
|
||||||
|
.focused($nameIsFocused)
|
||||||
}
|
}
|
||||||
.frame(minWidth: 100)
|
.frame(minWidth: 100)
|
||||||
.padding(.trailing, -15)
|
.padding(.trailing, -15)
|
||||||
|
|
@ -48,6 +52,7 @@ struct ContentView: View {
|
||||||
TextField("Enter minutes here", text: $timeMinutes)
|
TextField("Enter minutes here", text: $timeMinutes)
|
||||||
.keyboardType(.numberPad)
|
.keyboardType(.numberPad)
|
||||||
.textFieldStyle(.roundedBorder)
|
.textFieldStyle(.roundedBorder)
|
||||||
|
.focused($nameIsFocused)
|
||||||
}
|
}
|
||||||
.frame(minWidth: 100)
|
.frame(minWidth: 100)
|
||||||
.padding(.trailing, -15)
|
.padding(.trailing, -15)
|
||||||
|
|
@ -58,6 +63,7 @@ struct ContentView: View {
|
||||||
TextField("Enter seconds here", text: $timeSeconds)
|
TextField("Enter seconds here", text: $timeSeconds)
|
||||||
.keyboardType(.numberPad)
|
.keyboardType(.numberPad)
|
||||||
.textFieldStyle(.roundedBorder)
|
.textFieldStyle(.roundedBorder)
|
||||||
|
.focused($nameIsFocused)
|
||||||
}
|
}
|
||||||
.frame(minWidth: 100)
|
.frame(minWidth: 100)
|
||||||
.padding(.leading, -15)
|
.padding(.leading, -15)
|
||||||
|
|
@ -65,6 +71,13 @@ struct ContentView: View {
|
||||||
}
|
}
|
||||||
PaceResults(timeHours: $timeHours, timeMinutes: $timeMinutes, timeSeconds: $timeSeconds, selectedSystem: $selectedSystem, distance: $distance)
|
PaceResults(timeHours: $timeHours, timeMinutes: $timeMinutes, timeSeconds: $timeSeconds, selectedSystem: $selectedSystem, distance: $distance)
|
||||||
}
|
}
|
||||||
|
Spacer()
|
||||||
|
if nameIsFocused == true {
|
||||||
|
Button("Done") {
|
||||||
|
nameIsFocused = false
|
||||||
|
}
|
||||||
|
.padding()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -164,11 +177,11 @@ struct PaceResults: View {
|
||||||
HStack {
|
HStack {
|
||||||
VStack {
|
VStack {
|
||||||
Text("Distance: \(distance)\(selectedSystem)")
|
Text("Distance: \(distance)\(selectedSystem)")
|
||||||
Text("Converted distance: \(convertedDistanceString)\(notSelectedSystem)")
|
Text("Distance: \(convertedDistanceString)\(notSelectedSystem)")
|
||||||
}
|
}
|
||||||
Text("Total time: \(hoursFormatted):\(leadingZeros)")
|
Text("Total time\n\(hoursFormatted):\(leadingZeros)")
|
||||||
.padding()
|
.padding()
|
||||||
VStack {
|
VStack(alignment: .trailing) {
|
||||||
Text("\(paceFormatted) per \(selectedSystem)")
|
Text("\(paceFormatted) per \(selectedSystem)")
|
||||||
Text("\(paceFormattedOpposite) per \(notSelectedSystem)")
|
Text("\(paceFormattedOpposite) per \(notSelectedSystem)")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,20 @@ import SwiftUI
|
||||||
// human-readable without aid, as long as
|
// human-readable without aid, as long as
|
||||||
// the reader has a basic understanding of
|
// the reader has a basic understanding of
|
||||||
// Swift and/or SwiftUI.
|
// Swift and/or SwiftUI.
|
||||||
|
|
||||||
let username = "admin"
|
let username = "admin"
|
||||||
let password = "123"
|
let password = "123"
|
||||||
|
|
||||||
struct DocsView: View {
|
struct DocsView: View {
|
||||||
@State var pass: String = ""
|
enum Field: Hashable {
|
||||||
@State var user: String = ""
|
case username
|
||||||
|
case password
|
||||||
|
}
|
||||||
|
|
||||||
|
@State private var pass: String = ""
|
||||||
|
@State private var user: String = ""
|
||||||
|
@FocusState private var focusedField: Field?
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
NavigationView {
|
NavigationView {
|
||||||
List {
|
List {
|
||||||
|
|
@ -36,14 +44,22 @@ struct DocsView: View {
|
||||||
}
|
}
|
||||||
Section(header: Text("App Information")) {
|
Section(header: Text("App Information")) {
|
||||||
NavigationLink("Software License", destination: LicenseView())
|
NavigationLink("Software License", destination: LicenseView())
|
||||||
Text("Version: 1.0.0")
|
Text("Version: Release Candidate (1.0.0)")
|
||||||
Text("Release date: 2022-06-10")
|
Text("Release date: 2022-06-10")
|
||||||
Text("Start date: 2022-03-25")
|
Text("Start date: 2022-03-25")
|
||||||
Link("Built with SwiftUI \(Image(systemName: "swift"))", destination: URL(string: "https://developer.apple.com/xcode/swiftui")!)
|
Link("Built with SwiftUI \(Image(systemName: "swift"))", destination: URL(string: "https://developer.apple.com/xcode/swiftui")!)
|
||||||
}
|
}
|
||||||
Section(header: Text("Login")) {
|
Section(header: Text("Login")) {
|
||||||
SecureField("Username", text: $user)
|
SecureField("Username", text: $user)
|
||||||
|
.keyboardType(.alphabet)
|
||||||
|
.textContentType(.username)
|
||||||
|
.submitLabel(.next)
|
||||||
|
.focused($focusedField, equals: .username)
|
||||||
SecureField("Password", text: $pass)
|
SecureField("Password", text: $pass)
|
||||||
|
.keyboardType(.numbersAndPunctuation)
|
||||||
|
.textContentType(.password)
|
||||||
|
.submitLabel(.done)
|
||||||
|
.focused($focusedField, equals: .password)
|
||||||
if (pass == password && user == username) {
|
if (pass == password && user == username) {
|
||||||
NavigationLink("Contacts", destination: SecretView())
|
NavigationLink("Contacts", destination: SecretView())
|
||||||
}
|
}
|
||||||
|
|
@ -51,6 +67,14 @@ struct DocsView: View {
|
||||||
}
|
}
|
||||||
.navigationTitle("Docs")
|
.navigationTitle("Docs")
|
||||||
}
|
}
|
||||||
|
.onSubmit {
|
||||||
|
switch focusedField {
|
||||||
|
case .username:
|
||||||
|
focusedField = .password
|
||||||
|
default:
|
||||||
|
()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,6 @@ import SwiftUI
|
||||||
struct NewFeatures: View {
|
struct NewFeatures: View {
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView {
|
ScrollView {
|
||||||
Text("New Features\n")
|
|
||||||
.font(.largeTitle)
|
|
||||||
.bold()
|
|
||||||
.padding(.top, 40)
|
|
||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
Text("\u{2022} Reformatted the Docs tabs and made the common things up at the top")
|
Text("\u{2022} Reformatted the Docs tabs and made the common things up at the top")
|
||||||
Text("Implemented in Version Prerelease LVSXT10d.2\n")
|
Text("Implemented in Version Prerelease LVSXT10d.2\n")
|
||||||
|
|
@ -30,6 +26,7 @@ struct NewFeatures: View {
|
||||||
}
|
}
|
||||||
.padding(30)
|
.padding(30)
|
||||||
}
|
}
|
||||||
|
.navigationTitle("New Features")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -48,6 +45,7 @@ struct InProgressFeatures: View {
|
||||||
}
|
}
|
||||||
.padding(30)
|
.padding(30)
|
||||||
}
|
}
|
||||||
|
.navigationTitle("In Progress")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -66,6 +64,7 @@ struct DeprecatedFeatures: View {
|
||||||
}
|
}
|
||||||
.padding(30)
|
.padding(30)
|
||||||
}
|
}
|
||||||
|
.navigationTitle("Deprecated")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,61 +12,49 @@ import SwiftUI
|
||||||
struct RecentlyResolved: View {
|
struct RecentlyResolved: View {
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView {
|
ScrollView {
|
||||||
Text("Recently Resolved Issues")
|
|
||||||
.font(.largeTitle)
|
|
||||||
.bold()
|
|
||||||
.padding(.top, 40)
|
|
||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
Text("\n\u{2022} None since the addition of this tab")
|
Text("\u{2022} Implemented an easy way to dismiss the keyboard in the main view of Calculator (it only took 2 1/2 months)")
|
||||||
}
|
}
|
||||||
.padding(30)
|
.padding(30)
|
||||||
}
|
}
|
||||||
|
.navigationTitle("Recently Resolved")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct HighPriority: View {
|
struct HighPriority: View {
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView {
|
ScrollView {
|
||||||
Text("High Priority Issues")
|
|
||||||
.font(.largeTitle)
|
|
||||||
.bold()
|
|
||||||
.padding(.top, 40)
|
|
||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
Text("\n\u{2022} You can not dismiss the keyboard on iPhone\n\t\u{2022} This hides the tab bar at the bottom so you can't navigate the app after bringing it up")
|
Text("Tapping on the Contacts tab after entering correct login details causes the app to crash")
|
||||||
}
|
}
|
||||||
.padding(30)
|
.padding(30)
|
||||||
}
|
}
|
||||||
|
.navigationTitle("High Priority")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MediumPriority: View {
|
struct MediumPriority: View {
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView {
|
ScrollView {
|
||||||
Text("Medium Priority Issues")
|
|
||||||
.font(.largeTitle)
|
|
||||||
.bold()
|
|
||||||
.padding(.top, 40)
|
|
||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
Text("Wow. Such Empty.")
|
Text("Wow. Such Empty.")
|
||||||
.italic()
|
.italic()
|
||||||
}
|
}
|
||||||
.padding(30)
|
.padding(30)
|
||||||
}
|
}
|
||||||
|
.navigationTitle("Medium Priority")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct LowPriority: View {
|
struct LowPriority: View {
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView {
|
ScrollView {
|
||||||
Text("Low Priority Issues")
|
|
||||||
.font(.largeTitle)
|
|
||||||
.bold()
|
|
||||||
.padding(.top, 40)
|
|
||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
Text("\n\u{2022} Space between the equation and explanation in the \"Help\" tab is too large\n\u{2022} App has no custom icon")
|
Text("\u{2022} Space between the equation and explanation in the \"Help\" tab is too large\n\u{2022} App has no custom icon")
|
||||||
}
|
}
|
||||||
.padding(30)
|
.padding(30)
|
||||||
}
|
}
|
||||||
|
.navigationTitle("Low Priority")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct LicenseView: View {
|
struct LicenseView: View {
|
||||||
var fontSize:CGFloat {UIScreen.main.bounds.width > 700 ? 18 : 8}
|
var fontSize:CGFloat {UIScreen.main.bounds.width > 700 ? 18 : 9}
|
||||||
// figuring out how to do this came partly from tinyurl.com/9snwkrzt
|
// figuring out how to do this came partly from tinyurl.com/9snwkrzt
|
||||||
// and also partly from stackoverflow.com/questions/57727107/
|
// and also partly from stackoverflow.com/questions/57727107/
|
||||||
// then I remembered about ternary operators and I optimized it
|
// then I remembered about ternary operators and I optimized it
|
||||||
|
|
@ -96,10 +96,13 @@ struct LicenseView: View {
|
||||||
Text("Updated: 2022-06-09")
|
Text("Updated: 2022-06-09")
|
||||||
}
|
}
|
||||||
.navigationTitle("Software License Agreement")
|
.navigationTitle("Software License Agreement")
|
||||||
|
.navigationBarTitleDisplayMode(.inline)
|
||||||
// sets the top of the screen to this text which always
|
// sets the top of the screen to this text which always
|
||||||
// lets you know what page you're in
|
// lets you know what page you're in
|
||||||
.padding()
|
.padding()
|
||||||
.frame(maxWidth: .infinity)
|
.frame(maxWidth: .infinity)
|
||||||
|
// this just makes it so you can scroll anywhere on screen
|
||||||
|
// instead of only in the frame
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ import SwiftUI
|
||||||
struct SecretView: View {
|
struct SecretView: View {
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack {
|
VStack {
|
||||||
HStack {
|
ScrollView {
|
||||||
VStack {
|
VStack {
|
||||||
Image("jake.zimmerman.group")
|
Image("jake.zimmerman.group")
|
||||||
.resizable()
|
.resizable()
|
||||||
|
|
@ -59,8 +59,6 @@ Email: bostc@students.lakeviewspartans.org
|
||||||
}
|
}
|
||||||
.frame(minWidth: 350, minHeight: 175)
|
.frame(minWidth: 350, minHeight: 175)
|
||||||
.border(.primary)
|
.border(.primary)
|
||||||
}
|
|
||||||
HStack {
|
|
||||||
VStack {
|
VStack {
|
||||||
Image("aiden.moore.states")
|
Image("aiden.moore.states")
|
||||||
.resizable()
|
.resizable()
|
||||||
|
|
@ -104,6 +102,8 @@ Email: greenei@students.lakeviewspartans.org
|
||||||
.frame(minWidth: 350, minHeight: 175)
|
.frame(minWidth: 350, minHeight: 175)
|
||||||
.border(.primary)
|
.border(.primary)
|
||||||
}
|
}
|
||||||
|
.navigationTitle("Contacts")
|
||||||
}
|
}
|
||||||
|
.frame(minWidth: .infinity)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue