【问题标题】:Cocoa Button Launch outside Application可可按钮在应用程序外启动
【发布时间】:2011-05-14 10:46:00
【问题描述】:

我有以下设置:

NSWindow 中的 4x4(共 16 个)按钮(标准 NSButton 按钮)网格。

当我按下热键组合 (DDHotKey) 时 NSWindow 会出现在前面

现在,我想做的是为我的按钮提供以下功能:

  • 单击该按钮时,打开一个显示 /Applications/ 目录的对话框,并允许我选择其中列出的任何应用程序。

  • 选择应用程序时,将其存储在变量(我猜是)(或字符串?)中,并进行操作,以便当按下按钮键等价时,该应用程序启动

我正在环顾四周,但我不确定该做什么或从哪里开始寻找......有任何线索吗?

我的 appdelegate.m 文件中有这个:

- (void)openDoc:(id)sender
{
    int result;
    NSArray *fileTypes = [NSArray arrayWithObject:@"td"];
    NSOpenPanel *oPanel = [NSOpenPanel openPanel];

[oPanel setAllowsMultipleSelection:YES];
result = [oPanel runModalForDirectory:NSHomeDirectory()
                file:nil types:fileTypes];
if (result == NSOKButton) {
    NSArray *filesToOpen = [oPanel filenames];
    int i, count = [filesToOpen count];
    for (i=0; i<count; i++) {
        NSString *aFile = [filesToOpen objectAtIndex:i];
        id currentDoc = [[ToDoDoc alloc] initWithFile:aFile];
    }
}
}

如何将按钮链接到它?

【问题讨论】:

    标签: objective-c cocoa nsbutton nsopenpanel


    【解决方案1】:

    您可以使用NSOpenPanel 来选择应用程序。

    然后启动应用,看看this堆栈溢出问题。

    【讨论】:

    • 好吧,让我看看我是否明白。我需要继承 NSButton,对吧?我需要做的是创建一个按钮子类,该子类具有一个单击事件,该事件将打开 NSOpenPanel,并且它的 Key Equivalent 事件将执行加载的程序......对吗?
    • 不,请查看NSButton 文档。您设置了一个打开NSOpenPanel 的IBAction,您可以设置与setKeyEquivalent: 等效的密钥。
    • 你从 xib 文件链接它。如果您不知道如何操作,我建议您阅读有关 Xcode 的教程,或查看 Apple 的文档。
    • 哇没关系,我是个失败者...我修好了...谢谢你的帮助
    【解决方案2】:

    存储应用程序的路径,然后在您想要打开它们时。您可以使用system() 函数。

    system("open -a /Applications/someApplication.app");
    

    【讨论】:

    • 拉德。我回答了问题的后半部分,这有什么问题?
    • 使用system() 是非常危险的,而且启动外部应用程序的方式要好得多(并且被认可)。我能想到 3 个与system() 相去甚远的事情。
    • 好的,系统可能很危险,但我没有看到这里的布吉人,它并不比使用终端更危险,我看到可能存在便携性问题但不安全。
    • 出于好奇,Dave,为什么使用 system() 很危险?我打算在输入此内容后立即进行谷歌搜索..但是专业的答案总是很好:-)
    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多