簡體   English   中英

按下修改鍵時以編程方式更改按鈕文本和操作

[英]Programatically changing button text and actions when a modifier key is pressed

我想在按下⌥Option鍵時更改NSButton的文本-與在OS X上檢測到沖突文件時復制對話框類似,當按住Option鍵時將“同時保留”更改為“合並”。

就我而言,我想在按住選項鍵時將帶有文本的按鈕更改為“刪除”到“退出”。 此外,其功能應根據其標題進行更改,就像“復制”對話框中的選項一樣。

可以在Swift中以編程方式完成嗎?

您可以使用addLocalMonitorForEvents(matching:)進行訂閱,並檢測是否按下了這樣的選項鍵:

var optionKeyEventMonitor: Any? // property to store reference to the event monitor

// Add the event monitor
optionKeyEventMonitor = NSEvent.addLocalMonitorForEvents(matching: .flagsChanged) { event in
    if event.modifierFlags.contains(.option) {
        self.button.title = "copy"
        self.button.action = #selector(self.copyButtonClicked(_:))
    } else {
        self.button.title = "delete"
        self.button.action = #selector(self.deleteButtonClicked(_:))
    }  
    return event
}

@IBAction func copyButtonClicked(_ sender: Any) {
    Swift.print("Copy button was clicked!")
}

@IBAction func deleteButtonClicked(_ sender: Any) {
    Swift.print("Delete button was clicked!")
}

完成后,請記住刪除事件監視器:

deinit {
    if let eventMonitor = optionKeyEventMonitor {
        NSEvent.removeMonitor(eventMonitor)
    }
}

如果您不希望根據選項鍵狀態調用單獨的方法,則可以單擊按鈕時檢查ModifyFlags:

@IBAction func buttonClicked(sender: NSButton) {
    if NSEvent.modifierFlags().contains(.option) {
        print("option pressed")
    } else {
        print("option not pressed")
    }
}

在Swift 3代碼中:

func optionKeyDown() -> Bool
{
    return NSEvent.modifierFlags().contains(NSEventModifierFlags.option)
}

if optionKeyDown()
{
    print ("do option code")
}
else
{
    print ("do normal code")
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM