2

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

但是,这是行不通的。文件说_

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

看来这一定是它不起作用的原因。如何找到返回 YES 的响应者?

4

1 回答 1

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。

于 2013-11-18T16:51:39.427 回答