apple/SwiftUI, Combine

SwiftUI menu (feat. Picker)

lgvv 2022. 5. 25. 15:04

SwiftUI menu (feat. Picker)

 

목차

- 결과 스크린샷

- 코드

 

결과 스크린샷

 

결과 스크린샷

 

 

 


코드

설명보다는 코드가 간결해서 코드로 !

import SwiftUI

struct MenuPickerView: View {
    @State private var selection: SelectionType? = nil
    
    enum SelectionType: Identifiable {
        var id: String { self.title }
        
        case option1
        case option2
        
        case sectionSingle
        
        case sectionItem1
        case sectionItem2
        
        case pickerItem1
        case pickerItem2
        
        var title: String {
            switch self {
            case .option1: return "섹션 없는 아이템 1"
            case .option2: return "섹션 없는 아이템 2"
            case .sectionSingle: return "섹션 있는 단독 아이템"
            case .sectionItem1: return "섹션 있는 아이템 1"
            case .sectionItem2: return "섹션 있는 아이템 2"
            case .pickerItem1: return "피커 아이템 1"
            case .pickerItem2: return "피커 아이템 2"
            }
        }
    }

    var body: some View {
        NavigationStack {
            Text(selection?.title ?? "선택된 옵션 없음")
                .toolbar {
                    ToolbarItem(placement: .principal) {
                        Text("네비게이션")
                    }
                    ToolbarItem(placement: .topBarTrailing) {
                        Menu {
                            Button(SelectionType.option1.title) { selection = .option1 }
                            Button(SelectionType.option2.title) { selection = .option2 }
                            
                            Section {
                                Button(SelectionType.sectionSingle.title) { selection = .sectionSingle }
                            }
                            
                            Section {
                                Button(SelectionType.sectionItem1.title) { selection = .sectionItem1 }
                                Button(SelectionType.sectionItem2.title) { selection = .sectionItem2 }
                            }
                            
                            Picker(selection: $selection) {
                                let items: [SelectionType] = [.pickerItem1, .pickerItem2]
                                
                                ForEach(items, id: \.title) { item in
                                    Text(item.title)
                                }
                                
                            } label: {
                                Text("피커 아이템 선택")
                            }
                            
                        } label: {
                            Image(systemName: "ellipsis.circle")
                        }
                    }
                }
        }
    }
}

 

 

'apple > SwiftUI, Combine' 카테고리의 다른 글

[SwiftUI] ViewModifier  (0) 2022.06.02
[SwiftUI] LazyVGrid  (0) 2022.05.25
[SwiftUI] Picker, segmentedStyle (feat. enum CaseIterable)  (0) 2022.05.23
SwiftUI Toast, popup  (0) 2022.05.23
[SwiftUI] TextField, SecureField  (0) 2022.05.23