当UITextView的allowEditingTextAttributes属性启用时,
textView.allowsEditingTextAttributes = true
textview可以通过UIMenuController在上下文菜单中显示BIU(粗体/斜体/下划线)样式选项。
UIMenuController - BIU Styling Options #1
UIMenuController - BIU Styling Options #2
我想知道如何在BIU内的上下文菜单中添加更多样式选项(例如,删除线,突出显示)。例如,iOS'本机Notes应用程序在样式菜单中有四个选项(BIU +删除线)。
BIU Styling Options in the native Notes app
有什么办法吗?我花了好几个小时来找到一种方法来覆盖"选择器((" _showTextStyleOptions:"))"但无法知道如何......请帮助我!!
答案 0 :(得分:1)
当编辑菜单即将变为可见时,您会在UITextView中收到一个canPerformAction(_:withSender:)
调用。当用户在菜单中选择一个按钮时,再次调用此方法。您可以检查是否选择了字体样式按钮,并将自定义按钮添加到该子菜单。
class MyTextView: UITextView {
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
let menuController = UIMenuController.shared
if var menuItems = menuController.menuItems,
(menuItems.map { $0.action }).elementsEqual([.toggleBoldface, .toggleItalics, .toggleUnderline]) {
// The font style menu is about to become visible
// Add a new menu item for strikethrough style
menuItems.append(UIMenuItem(title: "Strikethrough", action: .toggleStrikethrough))
menuController.menuItems = menuItems
}
return super.canPerformAction(action, withSender: sender)
}
@objc func toggleStrikethrough(_ sender: Any?) {
print("Strikethrough button was pressed")
}
}
fileprivate extension Selector {
static let toggleBoldface = #selector(MyTextView.toggleBoldface(_:))
static let toggleItalics = #selector(MyTextView.toggleItalics(_:))
static let toggleUnderline = #selector(MyTextView.toggleUnderline(_:))
static let toggleStrikethrough = #selector(MyTextView.toggleStrikethrough(_:))
}
根据文档,添加按钮后,您可能必须在update()
上调用UIMenuController
。但这对我而言不是必需的。
答案 1 :(得分:0)