[iOS] UIMenu 사용해보기 📝

Cho·2023년 11월 4일

안녕하세요!
대회 때문에 계속 블로그 작성을 미루다 이제서야 작성하게 되네요..ㅎ
그래서 오늘은 제가 대회 프로젝트에서 사용한 재미있는 기능에 대하여 설명해 드릴까 합니다!

바로 UIMenu라는 기능 입니다!!

UIMenu?

말로 설명하기 보단 사진으로 보는게 빠르겠죠??

혹시 아이폰을 사용하면서 위와같이 많은 목록들이 뜨는 UI를 보신적이 있으신가요?
보통 Safari나 위와같이 앱을 꾹 눌렀을때 뜨는 UI인데요,
이게 바로 오늘 설명해 드릴 UIMenu입니다!!

사용해보기

먼저 UIMenu의 생성자를 살펴 보도록 하겠습니다.

title: 메뉴의 타이틀을 설정합니다.

image: 메뉴 타이틀 옆에 띄울 이미지를 설정합니다.

identifier: 메뉴의 고유한 식별자 입니다. nil로 지정하면 자동으로 고유한 식별자를 만들어 줍니다.

options: 메뉴에 대한 옵션을 추가할 수 있습니다.

이런 옵션들이 있다고 하네요.

children: 메뉴의 속성들을 추가할 수 있습니다. UIMenuElement를 상속 받고 있는 클래스들을 넣을 수 있다고 하네요

UIMenuElement를 상속받는 클래스들은 다음과 같습니다

  • UIMenu
  • UIAction
  • UICommand
  • UIKeyCommand
  • UIDeferredMenuElement

많네요;;

일단 UIMenu를 원하는 대로 설정해봅시다!!

let moreMenu = UIMenu(
            title: "",
            image: nil,
            identifier: nil,
            options: .displayInline,
            children: []
        )

저는 title과 image를 빈 상태로 Menu를 만들었습니다.

이후 childern에 넣어줄 UIAction을 만들어 보겠습니다.

let deleteAction = UIAction(
            title: "게시글 삭제",
            image: .trashCan,
            handler: { _ in print("삭제!")}
        )

let moreMenu = UIMenu(
            title: "",
            image: nil,
            identifier: nil,
            options: .displayInline,
            children: [deleteAction]
        )

위와 같이 저는 "게시글 삭제"라는 title을 가진 action을 만들고, UIMenu에 적용시켰습니다!

마지막으로 button의 menu에 저희가 만든 메뉴를 적용시키면?

let deleteAction = UIAction(
            title: "게시글 삭제",
            image: .trashCan,
            handler: { _ in print("삭제!")}
        )

let moreMenu = UIMenu(
            title: "",
            image: nil,
            identifier: nil,
            options: .displayInline,
            children: [deleteAction]
        )

button.menu = moreMenu

적용시킨 버튼을 길게 누르면 menu가 나오는 것을 볼 수 있습니다!!

하지만 만약, 버튼을 눌렀을 때 바로 메뉴를 띄우고 싶다면??
버튼의 showsMenuAsPrimaryAcrion을 true로 설정하면 됩니다!

마무리

오늘은 UIMenu에 대해 정리해 보았는데요, UIMenu를 활용하여 여러 편리한 UI들을 만들 수 있을 것 같아 기대가 되네요!

UIMenu말고도 다른 iOS관련 게시물도 올려보도록 하겠습니다!!

profile
기록하는 개발자

0개의 댓글