Когда я использовал опубликованную переменную, я не вижу свои календарные дни (SWIFTUI)
Это странно, и я действительно не знаю, ошибаюсь ли я, пытаясь выйти из моего приложения, используя опубликованную переменную... В основном я создал MotherView(), где приложение запускается и когда я нажимаю кнопку. Я мог бы также изменить значение на "Выход", я удаляю свой токен, чтобы перестать делать запросы к моему API... Все работает нормально, НО если я сделаю это, я не смогу увидеть текущий день в моем календаре. Но если я сначала запустил CalendarView(), он отлично работает... Я не знаю, как выйти, не повлияв на мой CalendarView()
Это то, что я хочу сделатьhttps://youtu.be/Fea0l7O5jtY
Вот мой код
CalendarView
импортировать SwiftUI
struct CalendarView: View {
let formatView = DateFormatter()
@State private var multipleIsPresented = true
@EnvironmentObject var fechaActual: PageSettings
var Appointments = [
Appointment(titleVisit: "Visita General", idVisit: 1, typeVisit: "Supervición", startDate: "2020-03-06T13:00", endDate: "2020-03-06T14:00", description: "Visita de Narciso", place: "Forte", userVisited: "Antonio Labra", statusVisitId: 1, statusVisit: "Anotado", imageProfile: "Vato1", jobPosition: "iOS Developer Intern", company: "Forte", visits: [], requeriments: []),
Appointment(titleVisit: "Visita RH", idVisit: 2, typeVisit: "Administrativa", startDate: "2020-03-06T13:00", endDate: "2020-03-06T14:00", description: "Visita de Narciso", place: "Forte", userVisited: "Antonio Labra", statusVisitId: 1, statusVisit: "Anotado", imageProfile: "Vato1", jobPosition: "iOS Developer Intern", company: "Forte", visits: [], requeriments: []),
Appointment(titleVisit: "Visita Mantenimiento", idVisit: 3, typeVisit: "Mantenimiento", startDate: "2020-03-08T13:00", endDate: "2020-03-07T14:00", description: "Visita de Antonio", place: "Forte", userVisited: "Narciso Meza", statusVisitId: 1, statusVisit: "Anotado", imageProfile: "Vato2", jobPosition: "iOS Developer Intern", company: "Forte", visits: [], requeriments: [])
]
var rkManager = RKManager(calendar: Calendar.current, minimumDate: Date(), maximumDate: Date().addingTimeInterval(60*60*24*365/2), mode: 0, typeVisit: nil)
init(){
formatView.dateFormat = "d MMM y"
}
var body: some View {
VStack{
VStack{
RKViewController(isPresented: self.$multipleIsPresented, rkManager: self.rkManager)
datesView(dates: self.rkManager.selectedDates)
}
.frame(height: UIScreen.main.bounds.height*0.3)
.padding(16)
HStack{
Button(action:{
self.fechaActual.todaysDate = dayChange(daysToAdd: -1, todaysDate: self.fechaActual.todaysDate)
dateShown(date: self.fechaActual.todaysDate, rkManager: self.rkManager)
}){
Image("Arrow")
.resizable()
.frame(width: UIScreen.main.bounds.height*0.03, height: UIScreen.main.bounds.height*0.03)
}
Text(formatView.string(from: self.fechaActual.todaysDate))
Button(action:{
self.fechaActual.todaysDate = dayChange(daysToAdd: 1, todaysDate: self.fechaActual.todaysDate)
dateShown(date: self.fechaActual.todaysDate, rkManager: self.rkManager)
}){
Image("Arrow")
.resizable()
.rotationEffect(.degrees(180))
.frame(width: UIScreen.main.bounds.height*0.03, height: UIScreen.main.bounds.height*0.03)
}
}
ScrollView(.vertical, showsIndicators: true){
ForEach(Appointments, id: \.self){Invi in
ZStack{
RoundedRectangle(cornerRadius: 8)
.foregroundColor(.white)
.shadow(radius: 2, y: 2)
.frame(width: UIScreen.main.bounds.width*0.95, height: UIScreen.main.bounds.width*0.12)
Button(action:{}){
HStack{
Circle()
.stroke(circleColor(statusVisit: Invi.typeVisit), lineWidth:3)
.frame(width: UIScreen.main.bounds.width*0.06, height: UIScreen.main.bounds.width*0.06)
.padding(.trailing, 8)
Text(Invi.titleVisit)
.frame(width: UIScreen.main.bounds.width*0.4, alignment: .center)
Text(Invi.typeVisit)
.frame(width: UIScreen.main.bounds.width*0.3, alignment: .center)
}
.frame(width: UIScreen.main.bounds.width*0.8)
}.accentColor(Color.black)
}
.onAppear(){
}
}
}
}
}
}
struct CalendarView_Previews: PreviewProvider {
static var previews: some View {
CalendarView()
}
}
MainView
import SwiftUI
import Combine
struct MainView: View {
@EnvironmentObject var pageSettings: PageSettings
@State var isNavigationBarHidden: Bool = true
@State var showActionSheet: Bool = false
let defaults = UserDefaults.standard
let img = Constants.Development.mediaURL + UserDefaults.standard.string(forKey: "profileImage")!
let colors = CustomColor().colors
init(){
UITabBar.appearance().backgroundColor = colors["Purple"]?.uiColor()
}
var body: some View {
ZStack{
VStack{
ZStack{
colors["LightGray"].edgesIgnoringSafeArea(.all)
HStack(alignment: .center, spacing: UIScreen.main.bounds.width * 0.15){
Text("goodMorning").foregroundColor(colors["Gray"]).bold()
Spacer().frame(width:UIScreen.main.bounds.width * 0.05)
ImageView(withURL: img , widthValue: 45, heightValue: 45)
.aspectRatio(contentMode: .fit)
.clipShape(Circle())
.onTapGesture {
let alertHostingController = UIHostingController(rootView: SettingsView())
alertHostingController.modalPresentationStyle = UIModalPresentationStyle.fullScreen
UIApplication.shared.windows[0].rootViewController?.present(alertHostingController, animated: false)
}
.onLongPressGesture {
self.showActionSheet = true
}.actionSheet(isPresented: $showActionSheet){
ActionSheet(title: Text("messageOptions"), buttons:[
.default(Text("logOut".localized)){
self.defaults.set(nil, forKey: "token")
self.pageSettings.currentPage = "login"
},
.cancel()
])
}
}
}
.frame(height:UIScreen.main.bounds.height * 0.08).clipped().shadow(radius: 2, x: 0, y: 0)
TabView{
ScheduleView().tabItem{
Image("Book")
Text("book").tag(0)
}
CalendarView().tabItem{
Image("CalendarToday")
Text("calendarToday").tag(1)
}
DirectoryView().tabItem{
Image("Contacts")
Text("contacts").tag(2)
}
InvitationView().tabItem{
Image("Email")
Text("invitations").tag(3)
}
InventoryView().tabItem{
Image("Inbox")
Text("inventory").tag(4)
}
}
}
}
}
}
struct MainView_Previews: PreviewProvider {
static var previews: some View {
MainView()
}
}
MotherView
import SwiftUI
import Firebase
struct MotherView: View {
@EnvironmentObject var pageSettings: PageSettings
var body: some View {
VStack {
if pageSettings.currentPage == "splash"{
SplashView()
}else{
if self.validateLogin(){
MainView()
}else{
LoginView()
}
}
}
}
func validateLogin()->Bool{
let defaults = UserDefaults.standard
let token = defaults.string(forKey: "token")
if token != nil {
return true
}else{
return false
}
}
}
struct MotherView_Previews : PreviewProvider {
static var previews: some View {
MotherView()
}
}
class PageSettings: ObservableObject {
@Published var currentPage = "splash"
@Published var systemVersion = UIDevice.current.systemVersion
@Published var imei = UIDevice.current.identifierForVendor
@Published var currentUser = Auth.auth().currentUser
@Published var todaysDate = Date()
}
PS. Думаю, я использую @EnvironmentObjects в обоих представлениях... Но я не знаю, как это исправить!:c