diff --git a/dimensionhub/Core/AppNavigation.swift b/dimensionhub/Core/AppNavigation.swift index edc8aad..2159a77 100644 --- a/dimensionhub/Core/AppNavigation.swift +++ b/dimensionhub/Core/AppNavigation.swift @@ -23,4 +23,25 @@ final class AppNavigation: ObservableObject { path.append(dest) } + func handleNotification(_ userInfo: [AnyHashable: Any]) { + print(userInfo) + guard let customData = userInfo["custom_data"] as? [String: AnyObject], + let target = customData["target"] as? String, + let params = customData["params"] as? [String : AnyObject] else { + return + } + + path = NavigationPath() + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [self] in + switch target { + case "detail": + if let dramaId = params["drama_id"] as? Int { + path.append(Destination.detail(id: dramaId)) + } + default: + () + } + } + } + } diff --git a/dimensionhub/Views/Search/SearchBar.swift b/dimensionhub/Views/Search/SearchBar.swift index ceb520c..a39e153 100644 --- a/dimensionhub/Views/Search/SearchBar.swift +++ b/dimensionhub/Views/Search/SearchBar.swift @@ -29,7 +29,6 @@ struct SearchBar: View { if !searchText.isEmpty { doSearch() isFirstResponder = false - print("isFirstResponder is set false") } } label: { Text("搜索") @@ -71,7 +70,6 @@ struct ControlledTextField: UIViewRepresentable { uiView.text = text context.coordinator.isUpdatingFromBinding = false } - print("call me update UIView: \(isFirstResponder)") // 2. 焦点控制优化 if isFirstResponder { @@ -113,12 +111,16 @@ struct ControlledTextField: UIViewRepresentable { // 失去焦点 func textFieldDidEndEditing(_ textField: UITextField, reason: UITextField.DidEndEditingReason) { - self.isFirstResponder = false + DispatchQueue.main.async { + self.isFirstResponder = false + } } func textFieldShouldReturn(_ textField: UITextField) -> Bool { onCommit() - self.isFirstResponder = false + DispatchQueue.main.async { + self.isFirstResponder = false + } return true } diff --git a/dimensionhub/Views/Search/SearchView.swift b/dimensionhub/Views/Search/SearchView.swift index d0f2198..88da06b 100644 --- a/dimensionhub/Views/Search/SearchView.swift +++ b/dimensionhub/Views/Search/SearchView.swift @@ -19,13 +19,9 @@ struct SearchView: View { // 是否显示搜索结果 @State private var showSearchResult: Bool = false - - // 控制是否需要显示键盘 - @State private var showKeyboard: Bool = true - - @State private var toolbarID = UUID() // 键盘焦点的控制 + @State private var toolbarID = UUID() @State private var isFocused: Bool = true var body: some View { @@ -69,16 +65,13 @@ struct SearchView: View { SearchBar(isFirstResponder: $isFocused, searchText: $searchText) { doSearch() } + .frame(width: UIScreen.main.bounds.width * 0.8) .id(toolbarID) - .onAppear { - print("searchBar appear") - } } } .padding(.horizontal, 12) .ignoresSafeArea(.keyboard, edges: .bottom) // 避免键盘遮挡 .onAppear { - print("main appear") toolbarID = UUID() } } @@ -94,9 +87,6 @@ struct SearchView: View { } } - // 其他情况下不自动弹出键盘 - self.showKeyboard = false - // 可选:添加历史记录 // let history = SearchHistory(keyword: trimmed, timestamp: Date()) // modelContext.insert(history) diff --git a/dimensionhub/dimensionhubApp.swift b/dimensionhub/dimensionhubApp.swift index f7b2041..0d4234b 100644 --- a/dimensionhub/dimensionhubApp.swift +++ b/dimensionhub/dimensionhubApp.swift @@ -12,7 +12,7 @@ import Observation @main struct dimensionhubApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate - @StateObject var appNav = AppNavigation() + @StateObject var appNav = AppNavigation.shared var sharedModelContainer: ModelContainer = { let schema = Schema([ @@ -167,22 +167,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD } // MARK: 消息处理 - private func handleRemoteNotification(userInfo: [AnyHashable: Any]) { - guard let customData = userInfo["custom_data"] as? [String: AnyObject], - let target = customData["target"] as? String, - let params = customData["params"] as? [String : AnyObject] else { - return - } - - switch target { - case "detail": - if let dramaId = params["drama_id"] as? Int { - AppNavigation.shared.append(dest: .detail(id: dramaId)) - } - default: - () - } + AppNavigation.shared.handleNotification(userInfo) } private func handleDeepLink(_ link: String) {