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?

Paulo Mattos
  • 18,845
  • 10
  • 77
  • 85
Dmitriy
  • 1,898
  • 1
  • 15
  • 24

1 Answers1

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.

  • 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. – Confused Vorlon Feb 19 '20 at 10:36
  • 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 keys – Matthew Weldon Feb 19 '20 at 14:26
  • @ConfusedVorlon UIGestureRecognizer does provide a `.modifierFlags` property. – Minsheng Liu May 14 '20 at 02:38
  • @MinshengLiu - nice spot. Added in 13.4 - perhaps Apple do listen ;) – Confused Vorlon May 14 '20 at 08:10
  • @ConfusedVorlon Didn't realize that it was so new. I am really lucky then! – Minsheng Liu May 19 '20 at 05:43