有条件地右键单击macos - finder中的项目

时间:2013-05-22 16:36:09

标签: xcode macos finder

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

换句话说,我无法在检查右键单击文件路径的条件下编辑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];

但是在添加menuItem之前我需要它。整个功能也在下面添加。

- (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];
    }
}

2 个答案:

答案 0 :(得分:1)

更好的方法是使用finder extensions。如果需要更大的灵活性,则可以使用通知与主应用进行通信,并动态更改右键单击菜单项。官方文档中的示例可以提供帮助。 Here是使用此方法添加自定义右键单击菜单项的应用程序。该页面具有指向源的链接。

答案 1 :(得分:0)

你应该为MethodSwizzling找到另一种方法。查找在生成菜单之前调用的方法。