diff --git a/Sources/BezierSwift/BezierSwift.swift b/Sources/BezierSwift/BezierSwift.swift index 56dabaef..cad86473 100644 --- a/Sources/BezierSwift/BezierSwift.swift +++ b/Sources/BezierSwift/BezierSwift.swift @@ -8,6 +8,14 @@ import UIKit public final class BezierSwift { + public struct Config { + fileprivate let hideKeyboardOnDialogDisplay: Bool + + public init(hideKeyboardOnDialogDisplay: Bool = true) { + self.hideKeyboardOnDialogDisplay = hideKeyboardOnDialogDisplay + } + } + static let shared = BezierSwift() private init() { } @@ -17,15 +25,34 @@ public final class BezierSwift { weak var bezierWindow: BezierWindow? var allowHitTest: Bool { self.dialogViewModel.item.isNotNil } + var config = Config() + + fileprivate func hideKeyboard() { + // NOTE: BezierDialog update 시 firstResponder 전달이 안돼서 키보드가 닫히지 않는 문제가 있습니다. + // Keyboard 를 닫아 키보드 입력을 막기 위한 함수입니다. by Tom 2024.04.17 + if self.config.hideKeyboardOnDialogDisplay { + DispatchQueue.main.async { + if #available(iOS 15.0, *) { + self.bezierWindow?.windowScene?.keyWindow?.endEditing(true) + } else { + UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) + } + } + } + } } extension BezierSwift { @available(iOS, deprecated: 16.0) @MainActor - public static func initializeWindow(windowLevel: UIWindow.Level = .bezierSwift) -> UIWindow { + public static func initializeWindow( + windowLevel: UIWindow.Level = .bezierSwift, + config: Config = Config() + ) -> UIWindow { guard let bezierWindow = BezierSwift.shared.bezierWindow else { let bezierWindow = BezierWindow(frame: UIScreen.main.bounds, windowLevel: windowLevel) BezierSwift.shared.bezierWindow = bezierWindow + BezierSwift.shared.config = config return bezierWindow } @@ -35,11 +62,13 @@ extension BezierSwift { @MainActor public static func initializeWindow( windowScene: UIWindowScene, - windowLevel: UIWindow.Level = .bezierSwift + windowLevel: UIWindow.Level = .bezierSwift, + config: Config = Config() ) -> UIWindow { guard let bezierWindow = BezierSwift.shared.bezierWindow else { let bezierWindow = BezierWindow(windowScene: windowScene, windowLevel: windowLevel) BezierSwift.shared.bezierWindow = bezierWindow + BezierSwift.shared.config = config return bezierWindow } @@ -60,10 +89,12 @@ extension BezierSwift { extension BezierSwift { public static func showDialog(param: BezierDialogParam) { BezierSwift.shared.dialogViewModel.update(item: BezierDialogItem(param: param)) + BezierSwift.shared.hideKeyboard() } public static func showDialog(item: BezierDialogItem) { BezierSwift.shared.dialogViewModel.update(item: item) + BezierSwift.shared.hideKeyboard() } public static func dismissDialog(id: UUID) { @@ -74,4 +105,3 @@ extension BezierSwift { BezierSwift.shared.dialogViewModel.dismiss() } } -