如何找到对canPerformAction返回YES的响应者:withSender:

时间:2013-10-09 18:43:55

标签: ios cordova uiwebview

我需要从UIWebView上的编辑菜单中禁用“定义”菜单项。这应该通过实现canPerformAction:withSender:并为要禁用的项返回NO来完成。即使这些是私人物品,似乎我应该能够为我想要保留的物品返回YES,而对于其他所有物品则为NO(如this question中所示)。

然而这不起作用。 documentation表示

  

如果响应者链中没有响应者返回YES,则禁用菜单命令。请注意,如果您的类为命令返回NO,则响应者链上的另一个响应者可能仍然返回YES,从而启用该命令。

这似乎是这不起作用的原因。如何找到哪个响应者返回YES?

1 个答案:

答案 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。