Skip to content

Commit f5be487

Browse files
authored
[MOB-418] hideKeyboard 함수 추가 및 다이얼로그에 적용 (#31)
* [Improvement] hideKeyboard 함수 추가 및 다이얼로그에 적용 * [Improvement] hideKeyboardOnDialogDisplay 추가 및 적용 [description] hideKeyboardOnDialogDisplay 를 통해 다이얼로그가 보였을 때, 키보드 이벤트 동작을 제어할 수 있는 옵션을 추가합니다. * [Fix] 누락된 hideKeyboardOnDialogDisplay 분기 추가
1 parent 9da8829 commit f5be487

File tree

1 file changed

+33
-3
lines changed

1 file changed

+33
-3
lines changed

Sources/BezierSwift/BezierSwift.swift

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@
88
import UIKit
99

1010
public 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

2245
extension 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 {
6089
extension 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

Comments
 (0)