我实现了contextMenuItemsForElement' for
WebView`
- (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
中的上下文菜单,但它无效。我错过了什么吗?
答案 0 :(得分:2)
我相信WebViews
中的上下文菜单会自动确定其NSMenuItems
的状态,这可能是手动状态设置不起作用的原因(-setEnabled:
)。
因为每次右键单击都会调用- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems
,最简单的做法就是在不需要时添加NSMenuItem
,但这可能不是你想要的。< / p>
我不知道如何为WebView
启用manual menu enabling。您最好的选择可能是与automatic menu enabling一起利用已经存在的验证机制。
- (BOOL)validateMenuItem:(NSMenuItem *)item {
BOOL shouldEnable = ...
if ([item action] == @selector(newContextualMenu:) &&
!shouldEnable) {
return NO;
}
return [super validateMenuItem:item]; // only use if super implements
}
这将定义您的操作定义的位置,因为它会在同一位置搜索它们。