iOS

【Swift】Full Keyboard Accessが有効な際にボタンの動作が行われない。

投稿日:

はじめに

こんにちはsuzukiです。今回の記事はFull keyboard Accessという機能のONOFFでアプリが想定しない動作を行っていたため、整理をかねてまとめてみました。

フルキーボードアクセス

Full Keyboard Accessとは
iOS13.4で追加された機能です。外部のKeyboardからiPhoneにアクセスしMacと同じようなコントールを行えます。
設定>アクセシビリティ>キーボード>フルキーボードアクセスから変更が可能です。
コントロール例
次の項目に移動する: Tab
前の項目に移動する: Shift+Tab
ホーム画面に移動する: Command+H
Appスイッチャーを開く: Tab+A

今回の問題

下記の条件で、ボタン設定を行った、カスタムViewの関数がよばれないという問題が起きます。
起きる確率は100%ではないため、まだ見えていない条件か例外パターンがあります。

  • 前述のフルキーボードアクセスの設定がONである
  • Xibで作成したカスタムViewをStoryBoardで配置している
  • カスタムViewのボタンにFirstResponderを利用して関数を設定している

同一の関数をViewControllerやAppDelegate等のレスポンスチェーン内に記述すると、そちら関数がよばれます。
そのためカスタムViewが、FirstResponderとして認識されなくなり、カスタムView設定した関数がよばれないという問題が起きているのだと考えております。

対応方法

対応としては、単純にFirstResponderを利用しないというのが良いかと考えております。
ないしはViewController側に、同じメソッドを記述するでも対応は可能かと思います。

再現アプリ

ViewController

Tag0のボタンにFirstResponderから関数を設定

ChildView

カスタムView
Tag1のボタンにFilesOwnerから関数を設定
Tag2のボタンにFirstResponderから関数を設定

動かしてみた

実際に下記の順番にボタンを押した際の動作を確認してみます。
Tag:0
Tag:1
Tag:2
設定ON
ViewController:0
ChildView:1
ViewController:2

設定OFF
ViewController:0
ChildView:1
ChildView:2

さいごに

なぜ起きるのかという問題は、情報の取得方法などでいろいろ詰まっております。
ほぼほぼ同様の画面で問題が発生しないパターンが見つかっているのでそちらの角度から何か違いが見つかるといいのですが、、、
おそらくですが、フルキーボードアクセスがONの際には、アクセスを行うViewControllerに対して、命令を常に送れる状態にする影響で、サブクラス側のFirstResponderが動作しないようになっているのだと思っております。

おすすめ書籍

[改訂新版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 WEB+DB PRESS plus 詳解 Swift 第4版 [改訂新版]Swiftポケットリファレンス (POCKET REFERENCE)

blog-page_footer_336




blog-page_footer_336




-iOS
-

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

Xcode11のデバッグ機能

1 はじめに2 Device Conditions2.1 Thermal state condition2.2 Network link condition3 Environment Override ...

iOS Chartsライブラリを使い移動平均線を描画してみる。

1 はじめに2 Chartsライブラリについて2.1 ライブラリの導入2.2 描画の準備3 折れ線グラフを描画する3.1 LineChartViewの設定3.2 LineChart用のデータ作成3.3 ...

iOSでFirestoreを使ってみた その2

1 はじめに2 リスナーのアタッチ2.1 ドキュメントのリッスン2.2 複数ドキュメントのリッスン3 ドキュメントの変更タイプの取得4 リスナーのデタッチ5 さいごに6 おすすめ書籍 はじめに 以前、 ...

[Swift] プロトコルを弱参照するために

1 はじめに2 プロトコルとは2.1 プロトコルの作成方法2.2 プロトコルを採用したクラス作成2.3 使用例3 ClassOnlyProtocolとは3.1 メリット3.2 使用例4 最後に5 おす ...

swift

[Swift]動画撮影にて好きなサイズでプレビュー表示する

1 はじめに1.1 前提条件2 実装3 さいごに はじめに こんにちは、nukkyです。 今回はメインのビューの右上とかに小窓の様なプレビューにカメラの映像を出して、動画撮影するという機能を作成したの ...

フォロー

blog-page_side_responsive

2022年1月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。