[英]How to make NSOpenPanel accept keyboard and mouse events in objective-c?
我有用 XCode 編寫的 C++ 控制台應用程序,我需要打開一個文件選擇器對話框。 為此,我將 Cocoa 與 Objective-c 一起使用。 我正在嘗試打開一個 NSOpenPanel 以將其用於此目的。 我目前正在使用以下代碼:
const char* saveDialog()
{
NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setFloatingPanel:YES];
if ( [openDlg runModal] == NSOKButton )
{
for( NSURL* URL in [openDlg URLs] )
{
NSLog( @"%@", [URL path] );
return [URL.path UTF8String];
}
}
return NULL;
}
這有效,但是創建的文件選擇器不能正確接受鼠標和鍵盤事件。 很難解釋,但例如,當我在窗口上方懸停時從 XCode 運行代碼時,鼠標仍然表現得好像在 XCode 中一樣,顯示插入符號。 當我從終端運行應用程序時,它會將輸入發送到終端,即使文件選擇器在“前面”。 但是,單擊命令會將鼠標事件正確地傳遞給文件選擇器。
我查看了 NSOpenPanel 的文檔並廣泛搜索了這個問題,但我找不到答案。
/*
To run in Terminal: clang openpanel.m -fobjc-arc -framework Cocoa -o openpanel && ./openpanel
*/
#import <Cocoa/Cocoa.h>
int main() {
NSApplication *application = [NSApplication sharedApplication];
[application setActivationPolicy:NSApplicationActivationPolicyAccessory];
NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setFloatingPanel:YES];
if ( [openDlg runModal] == NSModalResponseOK ) {
for( NSURL* URL in [openDlg URLs] ) {
NSLog( @"%@", [URL path] );
}
}
return 0;
}
感謝@Willeke。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.