iOS 에서 메뉴를 구현하는 방법이 iOS 16 에서 바뀌었습니다.

UITextView

UITextView 는 물론 별도로 설정하지 않아도 선택된 텍스트에 따라 자동으로 메뉴가 작동됩니다.

다음 UITextViewDelegate 함수를 통해 새로운 메뉴를 설정할 수 있습니다.

optional func textView(
    _ textView: UITextView,
    editMenuForTextIn range: NSRange,
    suggestedActions: [UIMenuElement]
) -> UIMenu?

다음과 같이 제안된 action 과 더하여 새로운 메뉴를 만듭니다.

UIEditMenuInteraction

iOS 16 에서 새롭게 UIEditMenuInteraction 이 소개되었습니다.

iOS 16 이전에는 PC 에서 우클릭시에 나오게 되는 Menu 를 만드는 데 제한이 많았었지만, UIEditMenuInteraction 을 통해서 일반적인 UIView 위에 자유롭게 메뉴를 표시할 수 있게 되었습니다.

UIEditMenuInteractionDelegate 를 통해서 메뉴가 표시되는 영역을 변경하거나, 메뉴에 추가되어야 할 action 을 지정할 수 있습니다.

UIMenu.preferredElementsize 로 사이즈를 지정할 수 있습니다.

새로운 옵션으로 keepsMenuPresented 를 제공합니다.

action 이후에 메뉴가 사라지기 않기 때문에 연속적인 action 이 필요할 경우 유용합니다.


WWDC22 Adopt desktop-class editing interactions