我目前正在使用UISearchController
,我发现了UISearchController
的一些尴尬行为。
以前我不知道有showsSearchResultsController
属性可以帮助我隐藏searchResultsController
。所以我尝试使用searchResultsController?.view.isHidden
来管理它。但我发现很少有情况下,我将true
分配给searchResultsController?.view.isHidden
,视图不会隐藏。
然而,当我使用showsSearchResultsController
并将false
分配给它时,searchResultsController
就像我想要的那样。
第一个代码是我最初使用的代码(发生故障)。
第二个代码是我修复的代码(工作正常)。
isHidden
.asDriver(onErrorJustReturn: true)
.drive(onNext: { [weak self] in
print("isHidden Before \($0) \(self?.searchController.searchResultsController?.view.isHidden)")
self?.appSearchController.searchResultsController?.view.isHidden = $0
print("isHidden After \($0) \(self?.searchController.searchResultsController?.view.isHidden)")
})
.disposed(by: disposeBag)
isHidden
.asDriver(onErrorJustReturn: true)
.drive(onNext: { [weak self] in
print("isHidden Before \($0) \(self?.searchController.searchResultsController?.view.isHidden)")
self?.appSearchController.showsSearchResultsController = !$0
print("isHidden After \($0) \(self?.searchController.searchResultsController?.view.isHidden)")
})
.disposed(by: disposeBag)
在这两种情况下,print的输出都是
isHidden Before false Optional(false)
isHidden After false Optional(true)
通过使用showsSearchResultsController
,我已经解决了这个问题,但是我真的想知道两者之间的区别。在我看来,我认为两个代码看起来很相似。分享想法对我很有帮助。
1条答案
按热度按时间gopyfrb31#
使用
showsSearchResultsController
属性是更好的方法。它是UISearchController
提供的公共API的一部分。设置该属性允许搜索控制器做任何它认为合适的事情来显示/隐藏搜索结果。这可能不仅仅是简单地显示/隐藏视图。当你做类似
searchResultsController?.view.isHidden = someBool
的事情时,你正在挖掘搜索控制器的(可以说)私有子结构。你绕过了公共API。你可能会失去使用showsSearchResultsController
提供的公共API所获得的一些细微差别或技巧。iOS的未来版本可能会改变
UISearchController
和搜索结果视图的外观和感觉。通过使用公共API,您的代码应该可以继续正常运行。直接挖掘搜索控制器视图的内部可能会导致错误的行为或糟糕的用户界面。