我正在从 boost C++ 创建的线程调用 NSOpenPanel。
面板行为不规律并且对鼠标的响应不佳,即单击对象有时在单击顶级组合框时不会提高响应。
我要运行一个单独的运行循环吗?我正在运行一个 runModalForDirectory,它应该负责运行它自己的循环。
我还创建了一个单独的 objc 类,该类执行 performSelectorOnMainThread 以在主线程中显示面板,但行为仍然相同。
[ps performSelectorOnMainThread:@selector(showOpenPanel) withObject:nil
waitUntilDone:YES
modes:[NSArray arrayWithObject:NSRunLoopCommonModes]];
我也尝试过使用 waitUntilDone:NO 并运行 CFRunLoopRunInMode 这也无济于事。
- (bool) showOpenPanel
{
NSOpenPanel *op = [NSOpenPanel openPanel];
[op setAllowsMultipleSelection:YES];
[op setTitle:@"Choose File"];
[op setMessage:@"Choose file for Importing."];
[op setFloatingPanel:true];
bool result =[op runModalForDirectory:NSHomeDirectory() file:nil types:self.fileTypes];
if (result == NSOKButton) {
[self setSelectedFiles:[op filenames]];
[self setLastShowResult:true];
}
else {
[self setLastShowResult:false];
}
[self setPanelIsDone:true];
return self.lastShowResult;
}