Notice
Recent Posts
Recent Comments
Link
๊ด€๋ฆฌ ๋ฉ”๋‰ด

lgvv98

[SwiftUI] menu (feat. Picker) ๋ณธ๋ฌธ

apple/๐Ÿš SwiftUI & Combine

[SwiftUI] menu (feat. Picker)

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2022. 5. 25. 15:04

 menu (feat. Picker)

 

โœ… ๋ฉ”๋‰ด์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์ž˜ ์‚ฌ์šฉ์•ˆํ•˜๋Š”๋ฐ, ์–ด๋Š๋‚  ๋ณด๋‹ˆ๊นŒ menu๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํŠผ์ด ๋“ค์–ด์™”๋‹ค.

 

 

โœ… ์ฝ”๋“œ

import SwiftUI


let myPets =  ["๋ฉ๋ฉ์ด ๐Ÿถ", "์•ผ์˜น์ด ๐Ÿฏ", "์ฐ์ฐ์ด ๐Ÿน"]

struct ContentView: View {
    
    @State private var shouldShowAlert : Bool = false // alert๋ฅผ ๋„์šฐ๊ธฐ ์œ„ํ•จ.
    @State private var myText : String = "" // ํ…์ŠคํŠธ
    @State private var selected : Int = 0 // ์„ ํƒํ•œ ์ธ๋ฑ์Šค
    
    var body: some View {
        NavigationView {
        	// Spacer()๋Š” ์ƒ๋‹จ 1 ํ•˜๋‹จ 2์˜ ๋น„์œจ๋กœ
            VStack(spacing: 20) {
                    Spacer()
                    Text("\(myPets[selected])") // ๋ทฐ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ธ€์ž
                        .font(.system(size: 60))
                        .bold()
                    Text("์šฐ์ธก ์ƒ๋‹จ์— ๋•ก๋•ก๋•ก์„ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”!")
                        .font(.title2)
                        .fontWeight(.black)
                    Spacer()
                    Spacer()
                }
                .padding()
                // ๋„ค๋น„๊ฒŒ์ด์…˜ ํƒ€์ดํ‹€ -> swiftUI 3.0์—์„œ๋Š”ใ… toolbar์—์„œ placment: .principal๋กœ ์‚ฌ์šฉ
                .navigationTitle("ํ•˜์ด์š”") 
                .toolbar(content: {
                    ToolbarItem(placement: .navigationBarTrailing, content: {
                        Menu { // ๋ฉ”๋‰ด๋กœ ๋ฌถ๊ธฐ ์œ„ํ•ด์„œ!
                            Button(action: {
                                // ์•ก์…˜
                                print("์˜ค๋Š˜๋„ ๋นก์ฝ”๋”ฉ ๋ฒ„ํŠผํด๋ฆญ!")
                                shouldShowAlert = true
                                myText = "์˜ค๋Š˜๋„ ๋นก์ฝ”๋”ฉ!"
                            }, label: {
                                // ๋ผ๋ฒจ
                                Label("์˜ค๋Š˜๋„ ๋นก์ฝ”๋”ฉ!" , systemImage: "flame.fill")
                            })
                            
                            // ๋ฉ€ํ‹ฐ ํŠธ๋ ˆ์ผ๋ง ํด๋กœ์ €
                            Button {
                                print("์ง‘์—์„œ ์‰ฌ๋Š” ๋‚  ๋ฒ„ํŠผํด๋ฆญ!")
                                shouldShowAlert = true
                                myText = "์ง‘์—์„œ ์‰ฌ๋Š” ๋‚ !"
                            } label : {
                                Label("์ง‘์—์„œ ์‰ฌ๋Š” ๋‚ !" , systemImage: "house.fill")
                            }
                            
                            Section { // ์„น์…˜์œผ๋กœ ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ
                                // ๋ฉ€ํ‹ฐ ํŠธ๋ ˆ์ผ๋ง ํด๋กœ์ €
                                Button {
                                } label : {
                                    Label("์ƒˆ ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ" , systemImage: "doc")
                                }
                                Button {
                                } label : {
                                    Label("์ƒˆ ํด๋” ๋งŒ๋“ค๊ธฐ" , systemImage: "folder")
                                }
                            }
                            Section {
                                // ๋ฉ€ํ‹ฐ ํŠธ๋ ˆ์ผ๋ง ํด๋กœ์ €
                                Button {
                                	// action
                                } label : {
                                    Label("ํŒŒ์ผ ๋ชจ๋‘ ์‚ญ์ œ" , systemImage: "trash")
                                }
                            }
                            
                            // Picker์—๋Š” Bindingํ•ด์•ผ ํ•œ๋‹ค.
                            Picker(selection: $selected, label: Text("์• ์™„๋™๋ฌผ ์„ ํƒ")) {
                            	// indices๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ
                                ForEach(myPets.indices, id: \.self, content: { index in
                                    Text("\(myPets[index])").tag(index)
                                })
                            }
                            
                        } label: {
                        	// ์ด ๋ถ€๋ถ„์—์„œ label๋กœ ๋ฒ„ํŠผ ๋งŒ๋“ ๋‹ค!
                            Circle().foregroundColor(Color.init(#colorLiteral(red: 0.8349713402, green: 0.1496438846, blue: 0.7993865004, alpha: 1)))
                                .frame(width: 50, height: 50)
                                .overlay(
                                    Label("๋”๋ณด๊ธฐ", systemImage: "ellipsis")
                                        .font(.system(size: 30))
                                        .foregroundColor(.white)
                                )
                            
                        } // ๋ฉ”๋‰ด
                    })
                }) // toolbar
                .alert(isPresented: $shouldShowAlert, content: { // alert ํ†ตํ•ด์„œ ์•Œ๋ฆผ ๋ณด์—ฌ์คŒ
                    Alert(
                    	title: Text("์•Œ๋ฆผ"),
                        message: Text("\(myText)"),
                        dismissButton: .default(Text("ํ™•์ธ"))
                    )
                })
        }
        
    }
}

๋ฉ”๋‰ด ์‚ฌ์šฉ ๊ฒฐ๊ณผ ์•„๋ž˜๋Š” ํ”ผ์ปค

'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
Comments