88import UIKit
99
1010public final class BezierSwift {
11+ public struct Config {
12+ fileprivate let hideKeyboardOnDialogDisplay : Bool
13+
14+ public init ( hideKeyboardOnDialogDisplay: Bool = true ) {
15+ self . hideKeyboardOnDialogDisplay = hideKeyboardOnDialogDisplay
16+ }
17+ }
18+
1119 static let shared = BezierSwift ( )
1220
1321 private init ( ) { }
@@ -17,15 +25,34 @@ public final class BezierSwift {
1725
1826 weak var bezierWindow : BezierWindow ?
1927 var allowHitTest : Bool { self . dialogViewModel. item. isNotNil }
28+ var config = Config ( )
29+
30+ fileprivate func hideKeyboard( ) {
31+ // NOTE: BezierDialog update 시 firstResponder 전달이 안돼서 키보드가 닫히지 않는 문제가 있습니다.
32+ // Keyboard 를 닫아 키보드 입력을 막기 위한 함수입니다. by Tom 2024.04.17
33+ if self . config. hideKeyboardOnDialogDisplay {
34+ DispatchQueue . main. async {
35+ if #available( iOS 15 . 0 , * ) {
36+ self . bezierWindow? . windowScene? . keyWindow? . endEditing ( true )
37+ } else {
38+ UIApplication . shared. sendAction ( #selector( UIResponder . resignFirstResponder) , to: nil , from: nil , for: nil )
39+ }
40+ }
41+ }
42+ }
2043}
2144
2245extension BezierSwift {
2346 @available ( iOS, deprecated: 16.0 )
2447 @MainActor
25- public static func initializeWindow( windowLevel: UIWindow . Level = . bezierSwift) -> UIWindow {
48+ public static func initializeWindow(
49+ windowLevel: UIWindow . Level = . bezierSwift,
50+ config: Config = Config ( )
51+ ) -> UIWindow {
2652 guard let bezierWindow = BezierSwift . shared. bezierWindow else {
2753 let bezierWindow = BezierWindow ( frame: UIScreen . main. bounds, windowLevel: windowLevel)
2854 BezierSwift . shared. bezierWindow = bezierWindow
55+ BezierSwift . shared. config = config
2956 return bezierWindow
3057 }
3158
@@ -35,11 +62,13 @@ extension BezierSwift {
3562 @MainActor
3663 public static func initializeWindow(
3764 windowScene: UIWindowScene ,
38- windowLevel: UIWindow . Level = . bezierSwift
65+ windowLevel: UIWindow . Level = . bezierSwift,
66+ config: Config = Config ( )
3967 ) -> UIWindow {
4068 guard let bezierWindow = BezierSwift . shared. bezierWindow else {
4169 let bezierWindow = BezierWindow ( windowScene: windowScene, windowLevel: windowLevel)
4270 BezierSwift . shared. bezierWindow = bezierWindow
71+ BezierSwift . shared. config = config
4372 return bezierWindow
4473 }
4574
@@ -60,10 +89,12 @@ extension BezierSwift {
6089extension BezierSwift {
6190 public static func showDialog( param: BezierDialogParam ) {
6291 BezierSwift . shared. dialogViewModel. update ( item: BezierDialogItem ( param: param) )
92+ BezierSwift . shared. hideKeyboard ( )
6393 }
6494
6595 public static func showDialog( item: BezierDialogItem ) {
6696 BezierSwift . shared. dialogViewModel. update ( item: item)
97+ BezierSwift . shared. hideKeyboard ( )
6798 }
6899
69100 public static func dismissDialog( id: UUID ) {
@@ -74,4 +105,3 @@ extension BezierSwift {
74105 BezierSwift . shared. dialogViewModel. dismiss ( )
75106 }
76107}
77-
0 commit comments