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


関連記事

swift

月と日を選択するpickerを作る

1 はじめに1.1 前提条件2 サンプル2.1 ピッカーのイメージ2.2 ピッカーのxibファイル2.3 実装したカスタムクラス2.4 呼び出し元のコード3 簡単な解説3.1 MonthAndDayP ...

【Swift】SwiftUIの理解のためDSL記法とFunctionBuilderを調べてみた

1 はじめに2 DSL(ドメイン固有言語)について3 関数ビルダ3.1 定義方法3.2 使用方法3.3 SwiftUIの関数ビルダ4 カスタム属性5 さいごに6 おすすめ書籍 はじめに Xcode11 ...

[iOS15]StoreKit2で課金処理をより簡単に

1 はじめに2 StoreKit2になって主に変更された箇所3 実装3.1 Product(課金アイテム)の取得方法3.2 Product(課金アイテム)の購入方法3.3 Product(課金アイテム ...

swift

Swift3 + Alamofire4 + Unbox2.4を使ってJSONをパースする

1 はじめに1.1 前提条件1.2 完成形2 モデルの作成3 APIクラスの作成4 ViewControllerの作成4.1 Delegateの指定4.2 TableViewの設定4.3 Search ...

MapKitをSwiftUIで使ってみた

1 はじめに2 地図の表示2.1 クリッピング表示3 地図にアノテーションを表示する3.1 マーカーの配置3.2 ピンの表示3.3 アノテーションのカスタマイズ4 さいごに5 おすすめ書籍 はじめに ...

フォロー

blog-page_side_responsive

2022年1月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

アプリ情報

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