2021-11-21に更新

iPadOS 15 にするとカーソルキーが動かなくなる問題の修正方法

フリーソフト9VAeきゅうべえ 、iPad版について。
iPad OS 15 にすると、キーボードのカーソルキーがきかなくなった。Alt+カーソルキーは動作するが、カーソルキーだけ押すと反応しない。

調べると、UIKeyCommand の wantsPriorityOverSystemBehavior を YES に設定しないといけないらしい。カーソルキーがOSのショートカットに割り当てられたみたいだ。
修正には、Xcode 13 (Big Sur以上)が必要

修正前

- (NSArray *)keyCommands { 
  return @[ 
    [UIKeyCommand keyCommandWithInput: UIKeyInputUpArrow modifierFlags: 0 action: @selector(keyUp)], 
    [UIKeyCommand keyCommandWithInput: UIKeyInputDownArrow modifierFlags: 0 action: @selector(keyDown)], 
    [UIKeyCommand keyCommandWithInput: UIKeyInputLeftArrow modifierFlags: 0 action: @selector(keyLeft)], 
    [UIKeyCommand keyCommandWithInput: UIKeyInputRightArrow modifierFlags: 0 action: @selector(keyRight)] 
  ]; 
}

修正後

- (NSArray *)keyCommands { 
  UIKeyCommand *ukey = [UIKeyCommand keyCommandWithInput: UIKeyInputUpArrow modifierFlags: 0 action: @selector(keyUp)]; 
  UIKeyCommand *dkey = [UIKeyCommand keyCommandWithInput: UIKeyInputDownArrow modifierFlags: 0 action: @selector(keyDown)]; 
  UIKeyCommand *lkey = [UIKeyCommand keyCommandWithInput: UIKeyInputLeftArrow modifierFlags: 0 action: @selector(keyLeft)]; 
  UIKeyCommand *rkey = [UIKeyCommand keyCommandWithInput: UIKeyInputRightArrow modifierFlags: 0 action: @selector(keyRight)]; 
  if (@available(iOS 11.0, *)) if(@available(iOS 15.0, *)){ 
    ukey.wantsPriorityOverSystemBehavior = YES; 
    dkey.wantsPriorityOverSystemBehavior = YES; 
    lkey.wantsPriorityOverSystemBehavior = YES; 
    rkey.wantsPriorityOverSystemBehavior = YES; 
  } 
  return @[ ukey, dkey, lkey, rkey ]; 
}

if (@available(iOS 11.0, *)) をいれておかないと、iOS 10 で落ちた。

ツイッターでシェア
みんなに共有、忘れないようにメモ

Danjiro Daiwa

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント