0

我正在尝试使用带有 Finder Inject 的 NSMenuItem 工具添加右键单击项目。我需要根据单击的文件/文件夹的路径更改项目。但似乎,使用查找器注入,菜单项是在右键单击之前生成的。

换句话说,我无法在检查右键单击文件的路径的条件下编辑 MenuItems。有任何想法吗?

我试过了

-(NSMenuItem *)createMenuItem {     
    // I need to catch the path of the clicked item here.    
    NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:@"ITEM TITLE" action:@selector(myMethodClicked:) keyEquivalent:@""];
    [menuItem setTarget:self];     
    return menuItem;
}

我可以通过下面的方法获取点击文件的路径,见行:

NSArray *selectedFiles = [[ILFinderMenu sharedInstance] selectedItems];

但是在添加 menuItems 之前我需要它。下面还添加了整个功能。

- (void)myMethodClicked:(id)sender {
    NSMenuItem *item = (NSMenuItem *)sender;
    NSMenu *submenu = [item submenu];
    
    NSArray *selectedFiles = [[ILFinderMenu sharedInstance] selectedItems];
    NSString *selectedFilePath = [selectedFiles objectAtIndex:0];
    NSString *appPath = @"/eclipse/";
            
    if ([selectedFilePath rangeOfString:appPath].location != NSNotFound) {
        // disable backup
        NSMenuItem *backupMenuItem = [submenu itemAtIndex:1];
        [backupMenuItem setEnabled:NO];
        
        // enable share
        NSMenuItem *shareItem = [submenu itemAtIndex:0];
        [shareItem setEnabled:YES];
    } else {            
        // disable share
        NSMenuItem *backupMenuItem = [submenu itemAtIndex:0];
        [backupMenuItem setEnabled:NO];
        
        // enable backup
        NSMenuItem *shareItem = [submenu itemAtIndex:1];
        [shareItem setEnabled:YES];
    }
}
4

2 回答 2

1

更好的方法是使用查找器扩展。如果您需要更大的灵活性,您可以使用通知与主应用程序通信并动态更改右键菜单项。官方文档中有可以提供帮助的示例。是一个使用该方法添加自定义右键单击菜单项的应用程序。该页面有一个指向源的链接。

于 2020-03-22T05:49:29.410 回答
0

您应该为MethodSwizzling. 查找将在生成菜单之前调用的方法。

于 2013-05-23T05:23:22.193 回答