Как перейти к другому контроллеру представления при нажатии на панель поиска - PullRequest
0 голосов
/ 16 мая 2019

Я немного застрял здесь.У меня есть панель поиска, встроенная в панель навигации в качестве заголовка, который я хочу.

Однако затем я хотел бы перейти к другому контроллеру представления, содержащему UIsearchcontroller в представлении коллекции, и при нажатии отмены пользователь возвращается к предыдущему представлению.(Очень похоже на использование контроллера панели поиска в Facebook или Instagrams)

Можно ли в любом случае использовать панель поиска в качестве кнопки для перехода к следующему контроллеру представления, который обрабатывает все функции поиска?

Это то, что у меня есть для панели поиска.

    func setUpNavBar() {
       let searchBar = UISearchBar()
       searchBar.sizeToFit()
       searchBar.searchBarStyle = .minimal
       searchBar.placeholder = "Search by username"
       searchBar.tintColor = UIColor.lightGray
       searchBar.barTintColor = UIColor.lightGray
       navigationItem.titleView = searchBar
       searchBar.isTranslucent = true
       }

Редактировать

Просто добавьте ответ ниже, если кто-нибудь сталкиваетсяэто и вы хотите получить эффект, который обрабатывает панель поиска как кнопку, используя

  func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
        self.present(UINavigationController(rootViewController: SearchBarController()), animated: true, completion: nil)
        searchBar.setShowsCancelButton(false, animated: true)
        return false
    }

Таким образом, когда вы нажимаете панель поиска, вы не получаете эффект, который показывает панель поиска активным, (если это имеет смысл).Когда вы нажимаете на панель поиска, это не дает никакого эффекта, оно просто приводит вас к (реальному) контроллеру поиска, тогда панель поиска активна и клавиатура отображается с кнопкой отмены.Я надеюсь, что это имеет смысл, если кто-то захочет получить пример, зайдите в Instagram, FB или Pinterest и нажмите на их строку поиска или значок поиска, и вы увидите.

1 Ответ

1 голос
/ 16 мая 2019

Добавить UISearchBarDelegate в первый контроллер вида. А в searchBarTextDidBeginEditing методе присутствует второй контроллер вида.

//ViewController.swift
class ViewController: UIViewController, UISearchBarDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        setUpNavBar()
    }
    func setUpNavBar() {
        let searchBar = UISearchBar()
        searchBar.delegate = self
        searchBar.sizeToFit()
        searchBar.searchBarStyle = .minimal
        searchBar.placeholder = "Search by username"
        searchBar.tintColor = UIColor.lightGray
        searchBar.barTintColor = UIColor.lightGray
        navigationItem.titleView = searchBar
        searchBar.isTranslucent = true
    }
    func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
        self.present(UINavigationController(rootViewController: SearchViewController()), animated: false, completion: nil)
    }
}
//SearchViewController.swift
class SearchViewController: UIViewController {
    let searchBar = UISearchBar()
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        setUpNavBar()
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        searchBar.becomeFirstResponder()
    }
    func setUpNavBar() {
        searchBar.sizeToFit()
        searchBar.searchBarStyle = .minimal
        searchBar.placeholder = "Search by "
        searchBar.tintColor = UIColor.lightGray
        searchBar.barTintColor = UIColor.lightGray
        navigationItem.titleView = searchBar
        searchBar.isTranslucent = true
    }
}
...