Loading...

How to detect fn key press in Swift?

question macOS swift
Ram Patra Published on November 10, 2021
Swift 5.0+

You can override the flagsChanged() method of NSViewController and have your code like below to detect fn key press and release in macOS:

override func flagsChanged(with event: NSEvent) {
	if event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.function) {
		print("fn key pressed")
	}
        
	if event.modifierFlags.intersection(.deviceIndependentFlagsMask) == [] {
		print("fn key released")
	}
}

P.S. The above solution was derived from this answer on SOF. This solution would also work for any of the modifier keys like Cmd, Shift, Opt, etc. However, note that this would be triggered even if a user has the fn key pressed all the time but presses/releases any other modifier keys. The above code doesn’t exactly detect fn key presses but rather whether the fn key is present in the list of modifier keys being pressed/released.

Presentify

Take your presentation to the next level.

FaceScreen

Put your face and name on your screen.

ToDoBar

Your to-dos on your menu bar.

Ram Patra Published on November 10, 2021
Image placeholder

Keep reading

If this article was helpful, others might be too

question macOS swift August 14, 2020 How to detect Delete key press in Swift?

Delete key press detection is slightly different than other keys. It uses NSDeleteCharacter like below:

question swiftui macOS January 26, 2024 How to hide the title bar in a SwiftUI macOS app?

Let’s say you have a view named ContentView and your main App file looks like this:

question swift macOS October 29, 2023 How to make Color conform to RawRepresentable in SwiftUI in macOS?

For various reasons you may want to convert the Color type to a String. And, below is a relatively cleaner way to do it.

Like my work?

Please, feel free to reach out. I would be more than happy to chat.