下記コードについて質問があります。長いコード失礼します。
日付を押すとその日が選択されるのですが、他の日が一瞬色付きます。
これを光らないようにしたいです。
お力をお貸しいただきたいです。よろしくお願いします。
swift
import SwiftUI import FSCalendar struct CalendarPage2:View{ @State var show: Bool = false @State var selectedDate = Date() @State var array : [Date] @State var s = 0 @State var m1 = Date() @State var m2 = Date() @State var sortarrays:[Sortarray] var body: some View{ ScrollView{ VStack{ Calendarpage(selectedDate:$selectedDate,array:$array).frame(height:360) Text(selectedDate,style:.date).padding() Button(action:{self.show = true;m1=selectedDate;m2=selectedDate}){Text("+")}.sheet(isPresented:self.$show){ SecondView(show:$show,selectedDate:$selectedDate,array:$array,newstart:$m1,newfinish:$m2,sortarrays:$sortarrays,s:$s) } if(array.count == 0){ } else{ ForEach(0..<array.count, id:\.self){index in if let savedValue = UserDefaults.standard.data(forKey: "sortkey") { let decoder = JSONDecoder() if let arraysort = try? decoder.decode([Sortarray].self, from: savedValue) { if(equals(arraysort[index].arraystart,arraysort[index].arrayfinish,selectedDate)){ Text("\(arraysort[index].arraystart,style: .time)〜\(arraysort[index].arrayfinish,style: .time)") Text("\(arraysort[index].arraytitle)") Text("\(arraysort[index].arraymemo)") } } } } } } } } init() { let a = UserDefaults.standard.array(forKey: "arraykey") as? [Date] ?? [] let so = UserDefaults.standard.array(forKey: "sortkey") as? [Sortarray] ?? [] _array = State(initialValue: a) _sortarrays = State(initialValue: so) } func equals(_ date1: Date, _ date2: Date,_ date3: Date) -> Bool { let calendar = Calendar.current let components1 = calendar.dateComponents([.year, .month, .day], from: date1) let components2 = calendar.dateComponents([.year, .month, .day], from: date2) let components3 = calendar.dateComponents([.year, .month, .day], from: date3) if(components1 == components2 && components2 == components3){ return true } else{ return false } } } struct Sortarray:Codable{ var arraytitle : String var arraymemo : String var arraystart : Date var arrayfinish : Date } struct SecondView: View { @Binding var show:Bool @Binding var selectedDate:Date @Binding var array:[Date] @Binding var newstart:Date @Binding var newfinish:Date @Binding var sortarrays:[Sortarray] @Binding var s:Int @State var newarray : [Date]=[] @State var newtitle = "" @State var newmemo = "" var body: some View { Button(action:{save();s=1;self.show.toggle()}){Text("保存")} Text("タイトル") TextField("",text:$newtitle) Text("メモ") TextEditor(text:$newmemo) DatePicker("開始時間",selection:$newstart) DatePicker("終了時間",selection:$newfinish) } func save() { if(s==0){ for index in 0..<array.count{ if let savedValue = UserDefaults.standard.data(forKey: "sortkey") { let decoder = JSONDecoder() if let arraysort = try? decoder.decode([Sortarray].self, from: savedValue) { sortarrays.append(Sortarray(arraytitle:arraysort[index].arraytitle,arraymemo:arraysort[index].arraymemo,arraystart:arraysort[index].arraystart,arrayfinish:arraysort[index].arrayfinish)) } } } } else{ } sortarrays.append(Sortarray(arraytitle:newtitle,arraymemo:newmemo,arraystart:newstart,arrayfinish:newfinish)) sortarrays.sort(by: {$1.arraystart > $0.arraystart}) let encoder = JSONEncoder() if let encodedValue = try? encoder.encode(sortarrays) { UserDefaults.standard.set(encodedValue, forKey: "sortkey") } array.append(selectedDate) UserDefaults.standard.set(array, forKey: "arraykey") } } struct Calendarpage: UIViewRepresentable { @Binding var selectedDate:Date @Binding var array:[Date] func makeUIView(context: Context) -> UIView { typealias UIViewType = FSCalendar let fsCalendar = FSCalendar() fsCalendar.dataSource = context.coordinator fsCalendar.delegate = context.coordinator return fsCalendar } func updateUIView(_ uiView: UIView, context: Context) { guard let v = uiView as? FSCalendar else{return} context.coordinator.array = array v.reloadData() } func makeCoordinator() -> Coordinator { return Coordinator(self,array:array) } class Coordinator: NSObject,FSCalendarDataSource, FSCalendarDelegate{ var array:[Date] var parent : Calendarpage init(_ parent: Calendarpage,array:[Date]) { self.parent = parent self.array = array } func calendar(_ calendar:FSCalendar, didSelect date:Date, at monthPosition:FSCalendarMonthPosition){ parent.selectedDate = date } func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int { if array.contains(date) { return 1 } else { return 0 } } } } struct CalendarPage_Previews: PreviewProvider { static var previews: some View { Group{ CalendarPage2() } } }
まだ回答がついていません
会員登録して回答してみよう