1

我实现了 contextMenuItemsForElement' forWebView`

 - (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems
{

    NSMenuItem* newMenuItem = [[NSMenuItem alloc] initWithTitle:@"NewMenuItem" action:@selector(newContextualMenu:) keyEquivalent:@""];
    [newMenuItem setEnabled:YES];
    NSArray *menuItemArray =  [NSArray arrayWithObject:newMenuItem];
    return menuItemArray;
}

我试图[newMenuItem setEnabled:NO];禁用 中的上下文菜单WebView,但它不起作用。我错过了什么吗?

4

1 回答 1

2

我相信上下文菜单中的WebViews自动确定其状态NSMenuItems,这可能是手动状态设置不起作用的原因(-setEnabled:)。

因为- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems每次右键单击时都会调用,所以最简单的方法是在不需要NSMenuItem时不添加,但这可能不是您想要的。

我不知道如何WebView. 您最好的选择可能是利用已有的验证机制与自动菜单启用相一致。

- (BOOL)validateMenuItem:(NSMenuItem *)item {
    BOOL shouldEnable = ... 
    if ([item action] == @selector(newContextualMenu:) &&
        !shouldEnable) {
        return NO;
    }
    return [super validateMenuItem:item]; // only use if super implements
}

这将在定义您的操作的位置进行定义,因为它会在同一个位置搜索它们。

于 2012-06-06T17:56:03.063 回答