iOS/코드조각

[iOS, Swift] UIMenu 기본적인 예제

검은참깨두유vm 2023. 2. 26. 00:01
반응형

iOS 16.1, Xcode 14.2, Swift 5, UIKit 환경에서 진행했습니다.

 

 

iOS13 이후부터 UIMenu를 사용할 수 있게 되었습니다.

기존에 AlertController를 통해 사용자에게 알림을 표현하였는데,

여러 개의 메뉴를 선택할 수 있는 UIMenu를 쓸 수 있어서 개발의 폭이 넓어졌습니다.

 

UIAction은 버튼을 클릭할 때 사용하는 addTarget과 비슷한 역할을 하는데

title, image, handler 등의 속성을 추가하여 메뉴에 표현되는 이미지와 클릭되었을 때 동작하는 코드를 넣을 수 있습니다.

let actionArray: [UIAction] = [
    UIAction(title: "테스트1", image: UIImage(systemName: "x.circle.fill"), handler: { _ in }),
    UIAction(title: "테스트2", image: UIImage(systemName: "x.circle"), handler: { _ in }),
    UIAction(title: "테스트3", image: UIImage(systemName: "rectangle"), handler: { _ in })
]

 

그리고 button menu 속성에 UIMenu를 넣은 후, showsMenuAsPrimaryAction 값을 true로 수정합니다.

let menu = UIMenu(title: "메뉴", children: actionArray)

button.menu = menu
button.showsMenuAsPrimaryAction = true

이제 버튼을 클릭하면 UIMenu가 뜨는 창이 나옵니다.

 

전체코드

class MenuViewController: UIViewController {
    
    @IBOutlet var button: UIButton!
    
    let actionArray: [UIAction] = [
        UIAction(title: "테스트1", image: UIImage(systemName: "x.circle.fill"), handler: { _ in }),
        UIAction(title: "테스트2", image: UIImage(systemName: "x.circle"), handler: { _ in }),
        UIAction(title: "테스트3", image: UIImage(systemName: "rectangle"), handler: { _ in })
    ]
        
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let menu = UIMenu(title: "메뉴", children: actionArray)
        
        button.menu = menu
        button.showsMenuAsPrimaryAction = true
    }
}

 

결과

 

 

 

참조

https://developer.apple.com/documentation/uikit/uimenu

 

 

반응형