Добавление панели поиска к представлению таблицы пользовательского интерфейса при наложении - PullRequest
1 голос
/ 06 июня 2019

Мне удалось создать темное наложение после того, как щелкнул значок поиска, и мне удалось добавить просмотр таблицы на темное наложение, но теперь я хочу добавить панель поиска в этом табличном представлении. Я не могу понять это, так как мой код отличается от других. Я новичок в Swift, поэтому мой код, вероятно, не самый чистый. Могу ли я спросить, может ли кто-нибудь показать мне, как это сделать, потому что у меня нет идей? Я разместил свой код ниже, может кто-нибудь, пожалуйста, покажите мне, где я иду не так.

Большое спасибо



class SearchLauncher: NSObject {

    let blackView = UIView()


    let tableView = UITableView()



    @objc func showSearch() {

        if let window = UIApplication.shared.keyWindow {

            blackView.backgroundColor = UIColor(white: 0, alpha: 0.5)

            blackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleDismiss)))

            window.addSubview(blackView)

            window.addSubview(tableView)


            let height: CGFloat = 600
            let y = window.frame.height - height
            tableView.frame = CGRect(x: 0, y: window.frame.height, width: window.frame.width, height: height)

            blackView.frame = window.frame
            blackView.alpha = 0

            UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {

                self.blackView.alpha = 1

                self.tableView.frame = CGRect(x: 0, y: y, width: self.tableView.frame.width, height: self.tableView.frame.height)

            }, completion: nil)
        }



    }

    @objc func handleDismiss() {

        UIView.animate(withDuration: 0.5) {
            self.blackView.alpha = 0

            if let window = UIApplication.shared.keyWindow {
                self.tableView.frame = CGRect(x: 0, y: window.frame.height, width: self.tableView.frame.width, height: self.tableView.frame.height)
            }
        }


    }



    override init() {
        super.init()
        //start doing something here maybe

    }



}```

1 Ответ

0 голосов
/ 06 июня 2019

Как вы пытались добавить поисковый контроллер?

Я бы сделал это, добавив UISearchController в качестве tableHeaderView вашего табличного представления. Сначала убедитесь, что к вашему классу добавлен протокол UISearchResultsUpdating.

class SearchLauncher: NSObject, UISearchResultsUpdating

Затем добавьте строку поиска в представление таблицы

let searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.sizeToFit()        
searchController.searchResultsUpdater = self

//you probably don't need this
//searchController.dimsBackgroundDuringPresentation = false

tableView.tableHeaderView = searchController.searchBar

А затем внедрить метод делегата updateSearchResults (для: _)

func updateSearchResults(for searchController: UISearchController) {
    filteredTableData.removeAll(keepingCapacity: false)

    //filter the table data by using searchController.searchBar.text!
    //filteredTableData = ...

    self.tableView.reloadData()
}
...