按下修改键时以编程方式更改按钮文本和操作
Programatically changing button text and actions when a modifier key is pressed
我想在按下 ⌥ Option 键时更改 NSButton
的文本 - 类似于在 [= 上检测到冲突文件时的复制对话框23=] X 按住 option 键时 "Keep Both" 变为 "Merge"。
在我的例子中,我想在按住选项键时将带有文本的按钮更改为 "delete" 到 "quit"。此外,其功能应根据其标题进行更改,就像“复制”对话框中的选项一样。
这可以在 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)
}
}
如果您不想根据选项键状态调用单独的方法,您可以改为在单击按钮时检查 modifierFlags:
@IBAction func buttonClicked(sender: NSButton) {
if NSEvent.modifierFlags().contains(.option) {
print("option pressed")
} else {
print("option not pressed")
}
}
在Swift3代码中:
func optionKeyDown() -> Bool
{
return NSEvent.modifierFlags().contains(NSEventModifierFlags.option)
}
if optionKeyDown()
{
print ("do option code")
}
else
{
print ("do normal code")
}
我想在按下 ⌥ Option 键时更改 NSButton
的文本 - 类似于在 [= 上检测到冲突文件时的复制对话框23=] X 按住 option 键时 "Keep Both" 变为 "Merge"。
在我的例子中,我想在按住选项键时将带有文本的按钮更改为 "delete" 到 "quit"。此外,其功能应根据其标题进行更改,就像“复制”对话框中的选项一样。
这可以在 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)
}
}
如果您不想根据选项键状态调用单独的方法,您可以改为在单击按钮时检查 modifierFlags:
@IBAction func buttonClicked(sender: NSButton) {
if NSEvent.modifierFlags().contains(.option) {
print("option pressed")
} else {
print("option not pressed")
}
}
在Swift3代码中:
func optionKeyDown() -> Bool
{
return NSEvent.modifierFlags().contains(NSEventModifierFlags.option)
}
if optionKeyDown()
{
print ("do option code")
}
else
{
print ("do normal code")
}