Меню фильтра категории SwiftUI - PullRequest
0 голосов
/ 18 февраля 2020

Как отфильтровать меню категорий, Показать изображения в категории в меню страниц ... Какой самый логичный способ этой системы и какой самый логичный способ этой системы Как была сделана опция фильтрации?

Или я должен оставить этот метод и создать отдельную серию для каждого поля и курса? Какой метод наиболее правильный? Нужно ли группировать в массив или создавать отдельные массивы

Пример. Выберите LYS, Список уроков: ADersCategory Выберите KPSS Список уроков: B

Спасибо

DataModal : 

enum AlanCategory : String , CaseIterable , Codable, Hashable {

case LYS 
case KPSSLISANS
case YGS
case KPSSONLISANS
case TEOG

}
enum DersCategory : String , CaseIterable , Codable, Hashable {

case Türkçe
case Tarih
case Coğrafya
case Felsefe
case DinKültürü
case Matematik
case Geometri
case Fizik
case Kimya
case Biyoloji
case İngilizce

}



struct Post : Identifiable, Hashable, Equatable, Codable {
var id : String
var alan : AlanCategory
var desc : String
var image : String
var ders : DersCategory




}


let postArray = [

//Lisans
Post(id: UUID().uuidString, alan: AlanCategory.KPSSLISANS, desc: "Alan", image: "test", ders: DersCategory.Türkçe),
Post(id: UUID().uuidString, alan: AlanCategory.KPSSLISANS, desc: "Alan", image: "test", ders: DersCategory.Türkçe),
Post(id: UUID().uuidString, alan: AlanCategory.TEOG, desc: "Alan", image: "test", ders: DersCategory.Biyoloji),
Post(id: UUID().uuidString, alan: AlanCategory.TEOG, desc: "Alan", image: "test", ders: DersCategory.Türkçe),
Post(id: UUID().uuidString, alan: AlanCategory.KPSSLISANS, desc: "Alan", image: "test", ders: DersCategory.Türkçe),
Post(id: UUID().uuidString, alan: AlanCategory.KPSSLISANS, desc: "Alan", image: "test", ders: DersCategory.Türkçe)

] 

Домашняя страница:

struct HomePage: View {

@State var showMenu = false
@State var showAlan = false
@State var showDers = false
@State var showKonu = false
@State var showMessage = false
var categories : [String: [Post]] {

    .init(grouping: postArray, by: {$0.alan.rawValue})

}


var body: some View {
    NavigationView{
        ZStack(alignment: .leading){
            VStack{


                HStack(spacing: 10){

                    Button(action: {
                        self.showAlan.toggle()
                    }) {
                        HStack{
                            Text("Alan Seç").frame(width : 100)
                            Image(systemName: self.showAlan ? "arrow.up" : "arrow.down")
                        }
                    }


                    Button(action: {
                        self.showDers.toggle()
                    }) {
                        Text("Ders Seç").frame(width : 100)
                        Image(systemName: self.showDers ? "arrow.up" : "arrow.down")
                    }
                    Button(action: {
                        self.showKonu.toggle()
                    }) {
                        Text("Konu Seç").frame(width : 100)
                        Image(systemName: self.showKonu ? "arrow.up" : "arrow.down")
                    }
                }.foregroundColor(.black)
                    .padding(.top, 20)
                Divider()
                ScrollView(.vertical, showsIndicators: false) {

                    VStack {
                        ForEach(self.categories.keys.sorted(), id:\String.self){ cate in
                            DenemeRow(cateName: "\(cate)", posts1: self.categories[cate]!)
                        }
                    }
                }
                Spacer()

            }
            HStack{
                ShowMenu()
                    .frame(width: 300)
                    .offset(x: self.showMenu ? 0 : -UIScreen.main.bounds.width )
                    .animation(.timingCurve(0.5, 0.5, 0.5, 0.5))


            }




        }.gesture(DragGesture().onChanged{drag in
            if drag.startLocation.x > drag.location.x {
                self.showMenu = false
            } else if drag.startLocation.x == drag.location.x {
                self.showMenu = false
            } else {
                self.showMenu = true
            }
        })
        .navigationBarTitle(Text("Anasayfa"), displayMode: .inline)
        .navigationBarItems(leading:

            Button(action: {
                withAnimation{
                self.showMenu.toggle()
                }
            }) {
                Image(systemName: "line.horizontal.3.decrease")
                    .foregroundColor(.black)
            },

                            trailing:
            Button(action: {
                              self.showMessage.toggle()
                          }) {
                              Image(systemName: "message")
                                  .foregroundColor(.black)
                          })



    }

}

}

Экран домашней страницы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...