微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

选中后,UISearchBar会收到通知

如何解决选中后,UISearchBar会收到通知

我正在尝试建立类似Instagram探索页面的视图。确切地说,我想在导航栏中显示一个带有UISearchBar的视图,并且如果选择/点击了搜索栏,我想过渡到一个新视图。

我正在使用SwiftUI,并且已经实现了这样的搜索栏:

class SearchBar: NSObject,ObservableObject {
    
    @Published var text: String = ""
    let searchController: UISearchController = UISearchController(searchResultsController: nil)
    var onChange: () -> Void = {}
    
    override init() {
        super.init()
        self.searchController.obscuresBackgroundDuringPresentation = false
        self.searchController.searchResultsUpdater = self
    }
    
    convenience init(onChange: @escaping() -> Void) {
        self.init()
        self.onChange = onChange
    }
}

extension SearchBar: UISearchResultsUpdating {
    
    func updateSearchResults(for searchController: UISearchController) {
        // Publish search bar text changes.
        if let searchBarText = searchController.searchBar.text {
            self.text = searchBarText
            self.onChange()
        }
    }
}

struct SearchBarModifier: ViewModifier {
    
    let searchBar: SearchBar
    
    func body(content: Content) -> some View {
        content
            .overlay(
                ViewControllerResolver { viewController in
                    viewController.navigationItem.titleView = self.searchBar.searchController.searchBar
                    self.searchBar.searchController.hidesNavigationBarDuringPresentation = false
                    self.searchBar.searchController.searchBar.searchTextField.backgroundColor = .white
                }
                .frame(width: 0,height: 0)
            )
    }
}

extension View {
    func add(_ searchBar: SearchBar) -> some View {
        return self.modifier(SearchBarModifier(searchBar: searchBar))
        
    }
}

现在,我试图像这样向搜索栏中添加UITapGestureRecognizer

viewController.navigationItem.titleView?.addGestureRecognizer(UITapGestureRecognizer(target: someClass,action: #selector(someClass.someFunction)))

但是在打开主视图时它总是崩溃。

那是错误消息:

2020-08-23 20:27:25.042221+0200 Envim[31277:771485] *** Terminating app due to uncaught exception 'NSinvalidargumentexception',reason: 'Invalid number value (NaN) in JSON write'
*** First throw call stack:
(
    0   CoreFoundation                      0x00007fff23e3cf0e __exceptionPreprocess + 350
    1   libobjc.A.dylib                     0x00007fff50ba89b2 objc_exception_throw + 48
    2   Foundation                          0x00007fff259fcde2 _writeJSONNumber + 1129
    3   Foundation                          0x00007fff259fda33 ___writeJSONObject_block_invoke + 371
    4   libswiftCore.dylib                  0x00007fff512f7c4d $ss26_SwiftDeferrednSDictionaryC23enumerateKeysAndobjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTf4dnn_n + 397
    5   libswiftCore.dylib                  0x00007fff510d4155 $ss26_SwiftDeferrednSDictionaryC23enumerateKeysAndobjects7options5usingySi_ys9UnmanagedVyyXlG_AHSpys5UInt8VGtXBtFTo + 37
    6   Foundation                          0x00007fff259fd003 _writeJSONObject + 475
    7   Foundation                          0x00007fff259fa320 -[_NSJSONWriter dataWithRootObject:options:error:] + 86
    8   Foundation                          0x00007fff259fc3fa +[NSJSONSerialization dataWithJSONObject:options:error:] + 145
    9   Envim                               0x000000010d2d51c6 $sSe5EnvimE14fromDictionaryxyp_tkcfC + 406
    10  Envim                               0x000000010d2fc12d $s5Envim7BlogAPIC16loadPopularBlogs9onSuccessyySayAA0B0VGc_tFySo16FIRQuerySnapshotCSg_s5Error_pSgtcfU_ + 1549
    11  Envim                               0x000000010d2ea98b $sSo16FIRQuerySnapshotCSgs5Error_psgieggg_ACSo7NSErrorCsgieyByy_TR + 139
    12  Envim                               0x000000010d74ac88 _ZZ35-[FIRQuery wrapQuerySnapshotBlock:]EN9Converter7OnEventEN8firebase9firestore4util8StatusOrINS1_3api13QuerySnapshotEEE + 152
    13  Envim                               0x000000010d8eb597 _ZZN8firebase9firestore3api5Query12GetDocumentsENS1_6SourceEONSt3__110unique_ptrINS0_4core13EventListenerINS1_13QuerySnapshotEEENS4_14default_deleteIS9_EEEEEN10ListenOnce7OnEventENS0_4util8StatusOrIS8_EE + 839
    14  Envim                               0x000000010d8ed294 _ZZN8firebase9firestore3api5Query19AddSnapshotListenerENS0_4core13ListenoptionSEONSt3__110unique_ptrINS3_13EventListenerINS1_13QuerySnapshotEEENS5_14default_deleteIS9_EEEEEN9Converter7OnEventENS0_4util8StatusOrINS3_12ViewSnapshotEEE + 612
    15  Envim                               0x000000010d749551 _ZZN8firebase9firestore4core18AsyncEventListenerINS1_12ViewSnapshotEE7OnEventENS0_4util8StatusOrIS3_EEENKUlvE_clEv + 177
    16  Envim                               0x000000010d74947d _ZNSt3__1L8__invokeIRZN8firebase9firestore4core18AsyncEventListenerINS3_12ViewSnapshotEE7OnEventENS2_4util8StatusOrIS5_EEEUlvE_JEEEDTclclsr3std3__1E7forwardIT_Efp_Espclsr3std3__1E7forwardIT0_Efp0_EEEOSC_DpOSD_ + 29
    17  Envim                               0x000000010d74942d _ZNSt3__128__invoke_void_return_wrapperIvE6__callIJRZN8firebase9firestore4core18AsyncEventListenerINS5_12ViewSnapshotEE7OnEventENS4_4util8StatusOrIS7_EEEUlvE_EEEvDpOT_ + 29
    18  Envim                               0x000000010d7493fd _ZNSt3__110__function12__alloc_funcIZN8firebase9firestore4core18AsyncEventListenerINS4_12ViewSnapshotEE7OnEventENS3_4util8StatusOrIS6_EEEUlvE_NS_9allocatorISB_EEFvvEEclEv + 29
    19  Envim                               0x000000010d74809e _ZNSt3__110__function6__funcIZN8firebase9firestore4core18AsyncEventListenerINS4_12ViewSnapshotEE7OnEventENS3_4util8StatusOrIS6_EEEUlvE_NS_9allocatorISB_EEFvvEEclEv + 30
    20  Envim                               0x000000010d5e47e5 _ZNKSt3__110__function12__value_funcIFvvEEclEv + 53
    21  Envim                               0x000000010d5e1fb5 _ZNKSt3__18functionIFvvEEclEv + 21
    22  Envim                               0x000000010d9d58d5 _ZN8firebase9firestore4util4Task17ExecuteAndReleaseEv + 229
    23  Envim                               0x000000010d65e5ed _ZN8firebase9firestore4util19ExecutorLibdispatch11InvokeAsyncEPv + 29
    24  libdispatch.dylib                   0x0000000111e58e8e _dispatch_client_callout + 8
    25  libdispatch.dylib                   0x0000000111e66d97 _dispatch_main_queue_callback_4CF + 1149
    26  CoreFoundation                      0x00007fff23da0909 __CFRUNLOOP_IS_SERVICING_THE_MAIN_disPATCH_QUEUE__ + 9
    27  CoreFoundation                      0x00007fff23d9b459 __CFRunLoopRun + 2041
    28  CoreFoundation                      0x00007fff23d9a944 CFRunLoopRunSpecific + 404
    29  GraphicsServices                    0x00007fff38ba6c1a GSEventRunModal + 139
    30  UIKitCore                           0x00007fff48c8b9ec UIApplicationMain + 1605
    31  Envim                               0x000000010d39d631 $s5Envim0A10AppWrapperV4mainyyFZ + 305
    32  Envim                               0x000000010d39d6a9 $s5Envim0A10AppWrapperV5$mainyyFZ + 9
    33  Envim                               0x000000010d39d6c4 main + 20
    34  libdyld.dylib                       0x00007fff51a231fd start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

有人知道当搜索栏被选中时如何通知我吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?