Как добавить другое текстовое поле в UISearchController, когда фокус находится на панели поиска?

Я пытаюсь добавить другое текстовое поле для ввода "Местоположение" в UISearchController, когда пользователь фокусируется на панели поиска, чуть ниже строки поиска на панели навигации.

Пример того, что у меня есть и куда я хочу:

enter image description here

Я пробовал что-то вроде этого, что не работает:

var searchController: UISearchController!

func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
    var myTextField: UITextField = UITextField(frame: CGRect(x: 0, y: 0, width: 200.00, height: 40.00))
    myTextField.backgroundColor = UIColor.purpleColor()
    myTextField.text = "Location"
    myTextField.borderStyle = UITextBorderStyle.None
    searchController.view.addSubview(myTextField)
}

Любая помощь будет замечательной! Спасибо.

Ответ 1

Не знаю, нашли ли вы свой ответ или нет. Позвольте мне предложить мое решение.

В коде нет ничего плохого. Он работает нормально. Но причина, по которой он не отображается, заключается в том, что когда вы нажимаете в строке поиска, func searchBarTextDidBeginEditing(searchBar: UISearchBar) не влияет на нее, потому что вы можете забыть установить делегат для панели поиска.

Я пробовал ваш код, и после установки делегата он просто отлично работает. Также он скрывается за навигационной панелью, так как позиция Y равна 0. Решение:

  • Добавьте UISearchBarDelegate в свой класс
  • В viewDidLoad()

      override func viewDidLoad(){
        super.viewDidLoad()
        searchcontroller.searchbar.delegate = self
        }
    
  • В searchBarTextDidBeginEditing

       func searchBarTextDidBeginEditing(searchBar: UISearchBar) {           
    
        var myTextField: UITextField = UITextField(frame: CGRect(x: 0, y: searchController.searchBar.frame.height + 20, width: view.frame.size.width, height: 40.00))
        myTextField.backgroundColor = UIColor.purpleColor()
        myTextField.text = "Location"
        myTextField.borderStyle = UITextBorderStyle.None
        searchController.view.addSubview(myTextField)
    }
    

Надеюсь, что это поможет.

Ответ 2

Попробуйте следующее:

вы просто создаете пользовательский NavigationBar, добавляете к нему текстовое поле и переопределяете методы делегирования SearchController

попробуйте, он может работать.