【SwiftUI】何もないところを押したらキーボードを閉じさせる方法

今日はSwiftUIの勉強していきます。

TextFieldやTextEditorのようなキーボードが表示される場合に、キーボードが表示されたままで閉じれないことがありました。

とりあえず背景部分をタップしたらキーボード閉じるという方法がわかったので共有します。

■開発環境

  • MacOS Monterey (12.1) Xcode (13.3.1)
  • キーボードを閉じる処理

    extensionを作る

    SwiftUIデフォルト機能でないのでUIKitの力を使います。とりあえずおまじないという感じで以下をextesionで実装します

    import Foundation
    import UIKit
    
    extension UIApplication {
        func closeKeyboard() {
            sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
        }
    }
    
    extensionを使う
    1. ZStackで背景領域を作る
    2. .onTapGestureモディファイアで
    3. UIApplication.shared.closeKeyboard()
    var body: some View {
        ZStack {
                
            // 背景
            ZStack {
                Color.white.edgesIgnoringSafeArea(.all)
             }
             .onTapGesture {
                 UIApplication.shared.closeKeyboard()
             }
    

    おわりに

    最後まで見ていただきヘペトナス!

    読者登録・Twitterのフォローもお願いします。