- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 UIWebView 中,我希望某个类 div 元素仅显示一个自定义上下文菜单条目。所以我在 UIWebView 委托(delegate)中实现了 canPerformAction::方法,如下所示:
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
if (self.webView.superview != nil) {
BOOL isMyClass=[[self.webView stringByEvaluatingJavaScriptFromString:@"window.getSelection().getRangeAt(0).startContainer.parentNode.className;"] isEqualToString:@"myClass"];
if (isMyClass) {
if (action == @selector(myAction:)) {
return YES;
} else {
return NO; // should disable any other menu items
}
}
}
return [super canPerformAction:action withSender:sender];
}
结果很奇怪:当用户选择这样一个myclass div时,大多数menuItem都没有显示(cut:copy:past:...)但是select:和selectAll:仍然显示(连同myAction)。在调试器下,我注意到这两个 select/selectAll 方法不会在委托(delegate)中触发 canPerformAction::......这两个方法在哪里触发?
最佳答案
我想我知道您可能遇到问题的原因。
我有同样的问题和类似的挫败感:
“为什么 select: 和 selectAll: 在单步执行对 canPerformAction::的调用时不出现?”
然后我意识到显示 UIMenuController 时的 firstResponder 只是一个容器,并且这个类有一个成员实际上是在扩展 UITextView 类。由于 sharedMenuController 与 Responder 链中的第一响应者交互,因此在容器中实现 canPerformAction 会跳过 select 和 selectAll,因为它们已经由 textView 成员(在这种情况下为 REAL firstResponder)处理。
你应该做的是在显示 UIMenuController 时找到哪个对象是你的 firstResponder,找到它可能拥有的任何响应者对象,直到你找到堆栈中最高的响应者,并在那里实现 canPerformAction。
祝你好运!
关于ios - UIWebView canPerformAction 不禁用某些菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12664577/
我试图强行在UITextField上隐藏“粘贴”气泡。 我的实现是从UIResponderStandardEditActions指定一个禁止选择器的列表,将其存储在UIResponder类别的Asso
在 UIWebView 中,我希望某个类 div 元素仅显示一个自定义上下文菜单条目。所以我在 UIWebView 委托(delegate)中实现了 canPerformAction::方法,如下所示
我最近遇到了一个问题。 UITapgesture 在模拟器上工作完美,甚至直接在设备上调试(iPhone 4、iOS 5.0.1),但是当我打包应用程序(Dep_Target iOS4.0m Base
我试图在 Entry 中禁用复制和粘贴。 我使用从 EntryRenderer 继承的 CanPerform Action 。 public class NEntryRenderer : EntryR
下面是我的代码,我发现当单击菜单“pasteAndGo”时,会打印两个日志字符串:1.粘贴并显示 2.粘贴并单击。我的要求是显示菜单时,显示“粘贴并显示”日志。单击它时,将显示“粘贴并单击”日志。 c
我需要从 UIWebView 的编辑菜单中禁用 Define 菜单项。这应该通过实现 canPerformAction:withSender: 并为要禁用的项目返回 NO 来完成。尽管这些是私有(pr
我的 iOS 应用程序遇到了此崩溃。 Fatal Exception: NSInvalidArgumentException 0 CoreFoundation 0x1
我做了很多研究,但没有办法解决这个问题。有人可以告诉我为什么没有为 MyTextField 对象调用 canPerformAction、caretRectForPosition、selectionRe
自从发布新的 SDK (iOS 6) 以来,UIDocumentInteractionControllerDelegate 的委托(delegate)方法 documentInteractionCon
我是一名优秀的程序员,十分优秀!