我的应用程序允许用户使用我创建的一些自定义格式按钮来格式化UITextView中的文本。现在,我想启用文本视图的allowsEditingTextAttributes
属性,以便用户可以copy and paste formatted text between text views。这样可以在标准UIMenuController中为文本视图启用粗体/斜体/下划线按钮。这很好,但是当用户通过此菜单更改格式时,我需要调用我的自定义方法来更新自定义格式按钮的状态。如何检测用户是否点击了其中一个UIMenuController的格式化按钮?
我在UITextView和UIMenuController类引用中查找了通知,但没有看到任何相关内容。这些格式设置按钮不会触发UITextViewTextDidChangeNotification
,也不会触发UITextViewDelegate的textViewDidChange:
方法。我也尝试了子类化UITextView类来覆盖那里的方法,但我不知道要覆盖什么方法。看起来似乎不存在bold:
方法,例如,即使那里存在paste:
方法。当点击其中一个粗体/斜体/下划线按钮时,是否有人知道调用哪个类的方法?
据我所知,这些按钮未在Text Programming Guide for iOS或UIMenuController class reference中提及。
答案 0 :(得分:2)
这可能会更有帮助。
如果在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...
如果选择“文字样式选项”菜单,则会出现以下内容:
toggleBoldface:
toggleItalics:
toggleUnderline:
希望这有帮助。