如何检测用户是否在UIMenuController中点击了格式化button?

我的应用程序允许用户使用我创build的一些自定义格式button来格式化UITextView中的文本。 现在我想启用文本视图的allowsEditingTextAttributes属性,以便用户可以在文本视图之间复制和粘贴格式化的文本 。 这将在标准UIMenuController中为文本视图启用粗体/斜体/下划线button。 这很好,但是当用户通过这个菜单更改格式时,我需要调用自定义方法来更新自定义格式button的状态。 如何检测用户是否已轻触其中一个UIMenuController的格式button?

我在UITextView和UIMenuController类的引用中寻找通知,但没有看到任何相关的东西。 这些格式化button不会触发UITextViewTextDidChangeNotification ,也不会触发UITextViewTextDidChangeNotificationtextViewDidChange:方法。 我也尝试了UITextView类的子类重写一个方法,但我不知道什么方法重写。 它看起来像一个bold:方法不存在,例如,即使在那里存在一个paste:方法。 有没有人知道什么类的方法是什么时候点击一个粗体/斜体/下划线button?

据我所知,这些button在iOS的文本编程指南或UIMenuController类引用中没有提及。

这可能会更有帮助。

如果您在UITextView子类中实现此方法,则可以控制是否显示菜单选项。 您还可以检查日志输出以查看调用的方法。 在下面的例子中,我禁用了文本样式选项菜单。

 - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { LOG(@"canPerformAction: called"); FLOG(@" action %@", NSStringFromSelector(action)); if (action == @selector(_showTextStyleOptions:)) { return NO; } return [super canPerformAction:action withSender:sender]; } 

这些是选中的一些选项:

 copy: select: selectAll: paste: delete: _promptForReplace: _showTextStyleOptions: *** _define: etc... 

如果您select了文本样式选项菜单,那么您将得到以下内容:

 toggleBoldface: toggleItalics: toggleUnderline: 

希望这可以帮助。