Add tap on search to focus search field on iOS

This commit is contained in:
Arkadiusz Fal
2023-05-26 23:18:55 +02:00
parent 562df2d9ba
commit 48263ae7db
6 changed files with 96 additions and 4 deletions

View File

@@ -63,7 +63,9 @@ final class NavigationModel: ObservableObject {
}
}
@Published var tabSelection: TabSelection!
@Published var tabSelection: TabSelection! { didSet {
if oldValue == tabSelection { multipleTapHandler() }
}}
@Published var presentingAddToPlaylist = false
@Published var videoToAddToPlaylist: Video!
@@ -295,6 +297,15 @@ final class NavigationModel: ObservableObject {
channelPresentedInSheet = channel
presentingChannelSheet = true
}
func multipleTapHandler() {
switch tabSelection {
case .search:
self.search.focused = true
default:
print("not implemented")
}
}
}
typealias TabSelection = NavigationModel.TabSelection

View File

@@ -39,7 +39,9 @@ final class RecentsModel: ObservableObject {
func addQuery(_ query: String) {
if !query.isEmpty {
NavigationModel.shared.tabSelection = .search
if NavigationModel.shared.tabSelection != .search {
NavigationModel.shared.tabSelection = .search
}
add(.init(from: query))
}
}

View File

@@ -16,9 +16,23 @@ final class SearchModel: ObservableObject {
@Published var querySuggestions = [String]()
private var suggestionsDebouncer = Debouncer(.milliseconds(200))
@Published var focused = false
var accounts: AccountsModel { .shared }
private var resource: Resource!
init() {
#if os(iOS)
addKeyboardDidHideNotificationObserver()
#endif
}
deinit {
#if os(iOS)
removeKeyboardDidHideNotificationObserver()
#endif
}
var isLoading: Bool {
resource?.isLoading ?? false
}
@@ -136,4 +150,18 @@ final class SearchModel: ObservableObject {
}
}
}
#if os(iOS)
private func addKeyboardDidHideNotificationObserver() {
NotificationCenter.default.addObserver(self, selector: #selector(onKeyboardDidHide), name: UIResponder.keyboardDidHideNotification, object: nil)
}
@objc func onKeyboardDidHide() {
focused = false
}
private func removeKeyboardDidHideNotificationObserver() {
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardDidHideNotification, object: nil)
}
#endif
}