我需要从UIWebView上的编辑菜单中禁用“定义”菜单项。这应该通过实现canPerformAction:withSender:
并为要禁用的项返回NO来完成。即使这些是私人物品,似乎我应该能够为我想要保留的物品返回YES,而对于其他所有物品则为NO(如this question中所示)。
然而这不起作用。 documentation表示
如果响应者链中没有响应者返回YES,则禁用菜单命令。请注意,如果您的类为命令返回NO,则响应者链上的另一个响应者可能仍然返回YES,从而启用该命令。
这似乎是这不起作用的原因。如何找到哪个响应者返回YES?
答案 0 :(得分:2)
最后,我用这个函数想出了这个函数,递归地遍历子视图并记录它们是否是第一响应者。
- (void) logResponderInfo: (UIView *)view
{
NSLog(@"%@ %@", NSStringFromClass(view.class), view.isFirstResponder ? @"yes" : @"no");
for (UIView *sub in view.subviews) {
[self logResponderInfo:sub];
}
}
我从我的canPerformAction:withSender:
函数
[self logResponderInfo:self.webView];
这写到了日志
2013-11-18 11:35:56.100 Testing[44593:a0b] CDVCordovaView no
2013-11-18 11:35:56.100 Testing[44593:a0b] _UIWebViewScrollView no
2013-11-18 11:35:56.101 Testing[44593:a0b] UIWebBrowserView yes
2013-11-18 11:35:56.101 Testing[44593:a0b] UITextSelectionView no
2013-11-18 11:35:56.102 Testing[44593:a0b] UIView no
2013-11-18 11:35:56.102 Testing[44593:a0b] UIImageView no
2013-11-18 11:35:56.103 Testing[44593:a0b] UIImageView no
2013-11-18 11:35:56.103 Testing[44593:a0b] UIActivityIndicatorView no
2013-11-18 11:35:56.104 Testing[44593:a0b] UIImageView no
告诉我第一个响应者实际上是UIWebBrowserView。