Skip to content

Commit

Permalink
[MOB-418] hideKeyboard 함수 추가 및 다이얼로그에 적용 (#31)
Browse files Browse the repository at this point in the history
* [Improvement] hideKeyboard 함수 추가 및 다이얼로그에 적용

* [Improvement] hideKeyboardOnDialogDisplay 추가 및 적용

[description]
hideKeyboardOnDialogDisplay 를 통해 다이얼로그가 보였을 때, 키보드 이벤트 동작을 제어할 수 있는 옵션을 추가합니다.

* [Fix] 누락된 hideKeyboardOnDialogDisplay 분기 추가
  • Loading branch information
solchan87 authored Apr 17, 2024
1 parent 9da8829 commit f5be487
Showing 1 changed file with 33 additions and 3 deletions.
36 changes: 33 additions & 3 deletions Sources/BezierSwift/BezierSwift.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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() { }
Expand All @@ -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
}

Expand All @@ -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
}

Expand All @@ -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) {
Expand All @@ -74,4 +105,3 @@ extension BezierSwift {
BezierSwift.shared.dialogViewModel.dismiss()
}
}

0 comments on commit f5be487

Please sign in to comment.