Jae*_*Lee 3 styling uitextview uimenucontroller ios swift
当UITextView的allowsEditingTextAttributes属性启用时,
textView.allowsEditingTextAttributes = true
Run Code Online (Sandbox Code Playgroud)
textview 可以通过 UIMenuController 在上下文菜单中显示 BIU(粗体/斜体/下划线)样式选项。
UIMenuController - BIU 样式选项 #1
UIMenuController - BIU 样式选项 #2
我想知道如何向 BIU 内的上下文菜单添加更多样式选项(例如,删除线、突出显示)。例如,iOS 的本机 Notes 应用程序在样式菜单中有四个选项(BIU + 删除线)。
有什么办法可以做到吗?我花了几个小时寻找一种覆盖“Selector(("_showTextStyleOptions:"))”的方法,但找不到如何操作..请帮助我!
当编辑菜单即将变得可见时,您会canPerformAction(_:withSender:)
在 UITextView 中收到一个调用。当用户选择菜单中的按钮时,会再次调用此方法。您可以检查是否选择了字体样式按钮并向该子菜单添加自定义按钮。
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(_:))
}
Run Code Online (Sandbox Code Playgroud)
根据文档,您可能需要在添加按钮后update()
调用。UIMenuController
但在我的情况下这是没有必要的。
归档时间: |
|
查看次数: |
2458 次 |
最近记录: |