实际上应该如何实现UISearchController?

时间:2019-06-06 13:09:00

标签: ios swift

我对这堂课很困惑。 UISearchControllerUIViewController,但实际上我发现的所有代码示例都将其实现为另一个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")
    }
}

就是这样。呈现的是: asd

单击搜索栏时,整个视图,甚至是搜索栏本身都将出现暗视图。无论我在哪里单击,搜索都将被拒绝。在这种状态下,取消按钮实际上是无用的。

现在-因为UISearchController确实是UIViewController,所以我尝试展示IT,而不是展示持有SearchController的ViewController。

因此,我没有在UINavigationController中展示我的SearchViewController,而是做了

self.navigationController?.present(UISearchController(searchResultsController: nil), animated: true, completion: nil)

asdasd

我是从self.还是self.navigationController?.展示它都没关系,它的作用相同。

这几乎可行。如果我还创建了一个自定义SearchResultsController来呈现tableView,则它可以工作(带有一些怪异的放置位置和插图)。但是现在,其他事情停止了。如果我转向设备环境,则SearchController会失去理智。以纵向和横向展示时,它被推得太远。相反,反之亦然。

我更喜欢在第二种方法中呈现动画,但是我不能使用它们中的任何一个,因为它们现在是正确的。我应该如何正确实施呢?

0 个答案:

没有答案