Как отображать результаты поиска, как приложение iOS «Контакты» - PullRequest
0 голосов
/ 28 июня 2018

Я новое программирование iOS. Я пытался реализовать свое приложение так, чтобы оно выглядело как приложение iOS Contacts. Но я понятия не имею, как реализовать то, что я желаю. Я хочу, чтобы результаты поиска выглядели как приложение iOS по умолчанию.

Посмотрите, что я пробовал до сих пор:

imagetrue ">

Когда я что-то набираю, dimsBackgroundDuringPresentation по-прежнему true.

Вот мое ожидание:

Here is detail of my expectation

Мне интересно, как это приложение показывает такие результаты.

Вот как я объявил UISearchController

lazy var searchController: UISearchController = ({

    let controller = UISearchController(searchResultsController: nil)

    controller.hidesNavigationBarDuringPresentation = false
    controller.searchBar.sizeToFit()
    controller.searchBar.backgroundColor = UIColor.clear
    controller.searchBar.placeholder = "Search"
    controller.dimsBackgroundDuringPresentation = true

    return controller

})()

Вот как я инициализировал searchBar в секции заголовка tableView

let searchBar = searchController.searchBar
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellId)
    searchBar.delegate = self

    tableView.tableHeaderView = searchController.searchBar

Вот функция для делегата UISearchResultsUpdating

func updateSearchResults(for searchController: UISearchController) {
    if let count = searchController.searchBar.text?.count {
        if count > 0  {

            filterArray.removeAll(keepingCapacity: false)
            var a = [String]()
            a = [searchController.searchBar.text!]
            filterArray = a
            searchController.dimsBackgroundDuringPresentation = false
            tableView.reloadData()
        }else {
            searchController.dimsBackgroundDuringPresentation = true
            filterArray.removeAll(keepingCapacity: false)
            filterArray = array
            tableView.reloadData()
        }
    }

}

Вот моя tableView клетка выглядит как

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if searchController.isActive {
        return filterArray.count
    }else {
        return array.count
    }

}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


    let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath)

    if searchController.isActive {
        cell.textLabel?.text = filterArray[indexPath.row]
    }else {
        cell.textLabel?.text = array[indexPath.row]
    }


    return cell

}

1 Ответ

0 голосов
/ 29 июня 2018

Попробуйте с этими опциями:

let search = UISearchController(searchResultsController: nil)
            self.definesPresentationContext = true
            search.dimsBackgroundDuringPresentation = false
            navigationItem.searchController = search
            navigationItem.hidesSearchBarWhenScrolling = false

Попробуйте код в моем репо, чтобы увидеть, как он работает, просто нажмите на элемент таблицы, и он перейдет ко второму контроллеру, где вы можете увидеть панель поиска и коснитесь его, чтобы увидеть, если это то, что вы хотели

github link

...