当用户在键盘上按下Command + period时,如何退出循环

时间:2013-05-03 00:05:04

标签: objective-c macos cocoa

我的实用程序应用程序在另一个应用上执行文本编辑操作 用户在NSPanel中设置参数并单击“确定”后,NSPanel将关闭并迭代while循环,在目标应用程序中执行必要的文本编辑。

我想为用户提供使用 Command + 暂停操作的选项。 我不确定如何在循环迭代时检查用户是否按住键。

简化了while循环。

- (IBAction)fileNameTrimAppend:(id)sender {
    [self activateTargetApp];  // applescript that brings target app to front
    [self openFileRenameDialog]; // applescript to open the file naming dialog

   // set variables to use in the loop from the user input
    [self close];   // close the input NSPanel

    while ([self fileRenameDialogOpen]) {  // applescript returns false when editing is done       
       if (command +"." is held down){  // need help here
             return;
          }

       // text mod is done here.
       // paste the mod text into target app field
       // move to the next field for editing
     }
}

2 个答案:

答案 0 :(得分:0)

除非你打算让应用程序挂起(和沙滩球),否则你需要将工作分解成更小的块,并一次处理一个块,让runloop处理两者之间的事件。您可以使用-performSelector:afterDelay:0来安排下一个块运行。

如果你打算在它工作时阻止所有内容,你需要自己重新考虑运行runloop。 runloop文档应该有更多的信息,但你可能需要挖掘一下:http://developer.apple.com/library/mac/#Documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html

答案 1 :(得分:0)

假设这是两个不同的过程,您可以使用addGlobalMonitorForEventsMatchingMask来观察键盘。

有关类似的讨论,请参阅this link