我对这堂课很困惑。 UISearchController
是UIViewController
,但实际上我发现的所有代码示例都将其实现为另一个ViewController
。
假设我有一个ViewController,我想在其中单击按钮并模态显示搜索。要在此模态呈现的VC中的NavigationController中包含searchController,请在单击按钮时执行以下操作:
self.present(UINavigationController(rootViewController:SearchViewController()), animated: true, completion: nil)
这是我呈现的微小观点:
class SearchViewController: UITableViewController, UISearchResultsUpdating {
override func viewDidLoad() {
super.viewDidLoad()
let sc = UISearchController(searchResultsController: nil)
self.navigationItem.searchController = sc
self.navigationItem.hidesSearchBarWhenScrolling = false
sc.searchResultsUpdater = self
}
func updateSearchResults(for searchController: UISearchController) {
print("Update results now")
}
}
单击搜索栏时,整个视图,甚至是搜索栏本身都将出现暗视图。无论我在哪里单击,搜索都将被拒绝。在这种状态下,取消按钮实际上是无用的。
现在-因为UISearchController确实是UIViewController,所以我尝试展示IT,而不是展示持有SearchController的ViewController。
因此,我没有在UINavigationController中展示我的SearchViewController,而是做了
self.navigationController?.present(UISearchController(searchResultsController: nil), animated: true, completion: nil)
我是从self.
还是self.navigationController?.
展示它都没关系,它的作用相同。
这几乎可行。如果我还创建了一个自定义SearchResultsController来呈现tableView,则它可以工作(带有一些怪异的放置位置和插图)。但是现在,其他事情停止了。如果我转向设备环境,则SearchController会失去理智。以纵向和横向展示时,它被推得太远。相反,反之亦然。
我更喜欢在第二种方法中呈现动画,但是我不能使用它们中的任何一个,因为它们现在是正确的。我应该如何正确实施呢?