2012-03-26 73 views
1

我開始爲我的Notes網站製作Mac應用程序。此應用程序基於菜單欄中的彈出窗口。彈出框內有一個文本框,但它不可編輯,雖然它已被激活。粘貼右鍵單擊例如作品...我怎樣才能使這個popover互動?目前只有當我按下某個鍵時,mac os的錯誤聲音纔會播放。Popover可編輯文本

感謝您的幫助!

Code: 
- (void)awakeFromNib 
{ 
    active = false; 
    statusItem = [[NSStatusBar systemStatusBar] 
        statusItemWithLength:NSVariableStatusItemLength]; 
    [statusItem setHighlightMode:YES]; 
    [statusItem setTitle:[NSString 
          stringWithString:@"test"]]; 
    [statusItem setEnabled:YES]; 
    [statusItem setToolTip:@"test"]; 

    [statusItem setAction:@selector(StatusClicked:)]; 
    [statusItem setTarget:self]; 
} 
- (void)StatusClicked:(id)sender { 
    if(!active) { 
     [[self popover] showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxYEdge]; 
     active = true; 
    } 
    else { 
     [popover close]; 
     active = false; 
    } 
} 

該視圖包含一個簡單的多行文本NSTextField。

如果popover無法實現,那麼還有其他可能性嗎?哪些元素是例如FaceTab(Facebook的菜單欄)使用,因爲文本字段是可編輯的。

+0

不應該有什麼特別的東西,你必須做,使之互動。您需要向我們提供更多關於您如何製作popover和其視圖的信息。 – rdelmar 2012-03-26 20:45:39

+0

好的,我改變了問題並添加了代碼。 – Dion 2012-03-26 20:48:44

+0

這對我來說似乎是一個錯誤。看看其他人是否看到過這種行爲會很有趣。我將你的代碼複製到一個測試項目中,使用popover(帶按鈕,彈出按鈕和文本框)。彈出窗口及其所有控件在連接到我的窗口時都能正常工作,但文本字段顯示了彈出窗口連接到狀態欄項目時所描述的行爲 - 其他控件正常工作。 – rdelmar 2012-03-26 22:02:14

回答

0

看起來你正在製作一個「代理」應用程序,除了StatusItem以外沒有其他UI。您可能已經在Info.plist中設置了LSUIElement標誌。 (基本上,它允許創建一個沒有菜單欄的應用程序)。

它對於「最前面的應用程序」和「關鍵窗口」如何反應也有重要的後果。在您的「statusClicked」方法中,您可能需要添加:

[NSApp activateIgnoringOtherApps:YES]; 

這樣才能真正激活您的應用程序。

(當然,如果你不寫一個LSUIElement /代理申請我所有的評論是不相關的。)

+0

是的,LSUIElement被激活。我停用它並添加了你的代碼,但它仍然沒有工作:(是「代理」一個不同的選項或某些激活/停用(因爲你說LSUIElement /代理應用程序)?但是,感謝您的答案,但! – Dion 2012-04-06 20:12:00

+0

不, LSUIElement標誌使其成爲「代理應用程序」。儘管Apple不一致地使用這些術語。 – 2012-04-09 12:14:07