Detect Single Modifier Key Change in UIKit for Mac (Catalyst)
Asked Answered
C

1

15

I am porting an iOS app on MacOS using UIKit for Mac also known as iPad Apps for Mac or Project Catalyst.

The app uses keyCommands from UIKit to detect a single modifier key press:

UIKeyCommand(input: "", modifierFlags: .shift, action: #selector(singleShift))

This code works perfectly on iPad with an external keyboard, I am getting the event fired with every single ⇧ press. However, this does not work on MacOS, although single non-modifier events and modifier + non-modifier combinations work.

How do I achieve the desired behavior and get notified about single modifier key events?

Or maybe I should just give up on UIKeyCommand and try UIGestureRecognizer instead?

Cavein answered 26/9, 2019 at 19:35 Comment(0)
M
1

This may not be your problem make sure you don't have any keyboard apps or apps that intercept keyboard input running. I had a problem like this when I had Karibeaner-elements installed.

Otherwise, if this is a limitation of catalyst consider wrapping a more stable API from app kit or use UIGestureRecognizer.

Main answered 19/2, 2020 at 1:24 Comment(5)
UIGestureRecognizer doesn't (as far as I know) provide a way to detect modifier keys. Am I missing something? My workaround now is as you suggest just to load an AppKit bundle. It would be nice to be able to do this in UIKit though.Facultative
I think you're correct, My suggestion was based on the OP saying they could use UIGestureRecognizer as a workaround, I wasn't aware of it's capability of recognizing mod keysMain
@ConfusedVorlon UIGestureRecognizer does provide a .modifierFlags property.Remanence
@MinshengLiu - nice spot. Added in 13.4 - perhaps Apple do listen ;)Facultative
@ConfusedVorlon Didn't realize that it was so new. I am really lucky then!Remanence

© 2022 - 2024 — McMap. All rights reserved.