출처 바로가기

 

iOS 14에서는 UIBarButtons 및 UIButtons에서 메뉴를 표시할 수 있습니다. (14버전 이후부터 가능)

 

UIMenu의 예제

viewDidLoad(_:)에 다음 코드를 작성합니다.

var menuItems: [UIAction] {
    return [
        UIAction(title: "Standard item", image: UIImage(systemName: "sun.max"), handler: { (_) in   
        }),
        UIAction(title: "Disabled item", image: UIImage(systemName: "moon"), attributes: .disabled, handler: { (_) in 
        }),
        UIAction(title: "Delete..", image: UIImage(systemName: "trash"), attributes: .destructive, handler: { (_) in  
        })
    ]
}

var demoMenu: UIMenu {
    return UIMenu(title: "My menu", image: nil, identifier: nil, options: [], children: menuItems)
}

 

UIBarButtonItem에 UIMenu 추가

현재 뷰 컨트롤러에 내비게이션 아이템이 있는 경우, 아래 코드를 추가합니다.

navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Menu", image: nil, primaryAction: nil, menu: demoMenu)

primaryAction을 지정하지 않았으므로 탭한 직후 메뉴가 나타납니다.

 

사용자가 만든 Bar Button Item에 메뉴를 추가하는 방법은 다음과 같습니다.

@IBOutlet weak var barBtnSetAlarm: UIBarButtonItem!

override func viewDidLoad() {
    super.viewDidLoad()
    // ... //

    barBtnSetAlarm.menu = demoMenu

 

UIButton + UIMenu

UIMenu를 탭한 즉시 표시하려면 showsMenuAsPrimaryActiontrue로 설정해야 합니다. 그렇지 않으면 길게 눌러야 메뉴가 나타납니다.

 

@IBOutlet var showMenuButton: UIButton!

func configureButtonMenu() {
    showMenuButton.menu = demoMenu
    showMenuButton.showsMenuAsPrimaryAction = true
}

 

UIMenu는 전통적인 UIAlertController의 Action Sheet를 대체할 수 있는 아주 좋은 솔루션입니다. 어떤 뷰 컨트롤러에서 표시할 지 여부를 고민하지 않아도 되고, 아이패드 등의 대화면 기기에서 표시 위치를 자동으로 잡아줘서 더 이상 표시 위치에 대해 신경쓰지 않아도 됩니다.

문의 | 코멘트 또는 yoonbumtae@gmail.com


카테고리: Swift


0개의 댓글

답글 남기기

Avatar placeholder

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다