UITextViewで文を選択した時に出るMenuに新たなMenuを追加したかったので、備忘録として残します。
実装
import UIKit
final class TextView: UITextView {
override func editMenu(for textRange: UITextRange, suggestedActions: [UIMenuElement]) -> UIMenu? {
var actions = suggestedActions
let customMenu = UIMenu(
title: "",
options: .displayInline,
children: [
UIAction(title: "カスタム") { _ in
print("カスタム")
}
]
)
actions.insert(customMenu, at: 0)
return UIMenu(children: actions)
}
}
これで既存のメニューにあらたなMenuを追加することができました!
また、既存のメニューを全て消し、カスタムのメニューだけ表示したい場合はこのように記述します。
final class TextView: UITextView {
override func editMenu(for textRange: UITextRange, suggestedActions: [UIMenuElement]) -> UIMenu? {
var actions = suggestedActions
let customMenu = UIMenu(
title: "",
options: .displayInline,
children: [
UIAction(title: "カスタム") { _ in
print("カスタム")
}
]
)
return UIMenu(children: customMenu.children)
}
}
おわりに
意外と参考になるサイトがなくて苦労しました。
SwiftUIでカスタマイズしたい場合は、UIKitに触れなければならないようです。