소개

텍스트 뷰 등에서 텍스트를 선택하면 아래와 같은 메뉴가 나옵니다.

 

여기에 기존에 없는 메뉴를 추가하고 싶다면 어떻게 해야 할까요? 아래 스크린샷에서 단어장에 추가 메뉴는 iOS에 없는 메뉴로 제가 새로 추가한 것입니다.

 

방법

Step 1

addCustomMenu()  함수를 추가하고, 뷰 컨트롤러의 viewDidLoad(_:)addCustomMenu()를 실행하도록 추가합니다.

override func viewDidLoad() {
    super.viewDidLoad()

    addCustomMenu()
}

private func addCustomMenu() {
    let addToDictionary = UIMenuItem(title: "단어장에 추가", action: #selector(addToDictionary))
    UIMenuController.shared.menuItems = [addToDictionary]
}
  • addToDictionary
    • UIMenuItem을 사용해 새로운 메뉴를 만듭니다.
    • title에는 제목, action에는 메뉴를 클릭했을 때 실행할 selector 함수를 지정합니다.
  • UIMenuController.shared.menuItems
    • 텍스트를 선택했을 떄 나타나는 메뉴에서 사용자가 만든 새로운 메뉴를 추가합니다.
    • 배열로 UIMenuItem을 추가합니다.

 

Step 2

셀렉터 함수(@objc)를 작성합니다.

@objc func addToDictionary() {
    if let range = txvNotepad.selectedTextRange,
       let selectedText = txvNotepad.text(in: range) {
        print(selectedText)

        // selectedText: 선택 영역의 텍스트
        // 해야할 작업 작성
    }
}
  • range
    • 텍스트가 선택된 범위 정보가 담겨있습니다.
  • selectedText
    • range 범위에서 선택된 텍스트입니다. 맨 위의 스크린샷에서 Detect가 선택되었으므로 selectedText"Detect" 입니다.
    • 이 변수를 바탕으로 해야 할 작업을 작성합니다.

 

출처

 

참고

위의 예제는 순서를 지정할 수 없습니다. (사용자가 추가한 메뉴는 iOS 기본 메뉴 이후에 추가됨)

메뉴를 완전히 새로 만들어서 원하는 메뉴를 맨 앞에 나오게 할 수 있습니다.

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


카테고리: Swift


0개의 댓글

답글 남기기

Avatar placeholder

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