Получить текст в строке поиска

Я хочу использовать панель поиска в своем приложении. Но я не мог найти никакого учебника для этого.

Мой вопрос прост: как я могу получить текст в строке поиска, когда пользователь вводит кнопку?

Мне нужно что-то вроде этого в моем контроллере:

override func userPressedToEnter(text: String) {
     println("User entered: \(text)")
}

Как это сделать быстро?

Ответ 1

Предполагая, что у вас есть простая панель поиска в вашей раскадровке, убедитесь, что она подключена как розетка. Тогда используйте это как пример. Используйте ссылку UISearchBarDelegate, чтобы узнать больше о доступных вам методах делегирования.

import UIKit

class ViewController: UIViewController, UISearchBarDelegate {

@IBOutlet var searchBar:UISearchBar!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        searchBar.delegate = self
    }

    func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
        print("searchText \(searchText)")
    }

    func searchBarSearchButtonClicked(searchBar: UISearchBar) {
        print("searchText \(searchBar.text)")
    }

}

Ответ 2

Я бы посмотрел на протокол UISearchBarDelegate:  https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UISearchBarDelegate_Protocol/index.html

Сделайте свой класс контроллера соответствия соответствующим этому протоколу, и у вас будет все, что вам нужно, чтобы взаимодействовать со своей панелью поиска. В качестве альтернативы вы можете получить текстовое поле в строке поиска, но Apple предоставляет вам более чистый, более удобный, управляемый событиями путь через этот протокол.

Ответ 3

Предполагая, что у вас есть табличное представление, которое вы ищете, добавьте панель поиска и поисковый контроллер в табличное представление в раскадровке. Это приведет к подключению всех необходимых вам источников данных/делегатов.

Затем в вашем представлении таблицы вы можете использовать:

func searchDisplayController(controller: UISearchDisplayController!, shouldReloadTableForSearchString searchString: String!) -> Bool {
  doStuffWithSearchText(searchBar.text, scope: 0)
}

который будет вызываться при каждом изменении текста в строке поиска. Обычно обновлять данные, отображаемые каждый раз, когда они меняют текст, но если вам нужно сделать это, только когда они нажимают на кнопку поиска, используйте эту функцию вместо:

func searchBarSearchButtonClicked(searchBar: UISearchBar) {
  doStuffWithSearchText(searchBar.text, scope: 0)
}

И вы можете получить текст из контроллера результатов поиска:

controller.searchBar.text

Или из строки поиска:

searchBar.text

Если вы не используете контроллер tableview:

  • Добавить панель поиска
  • Подключите контроллер вида в качестве делегата панели поиска
  • Затем используйте функцию searchBarSearchButtonClicked:, чтобы обращаться, когда они нажимают кнопку "Поиск" или searchBar (searchBar: UISearchBar, textDidChange searchText: String) для обработки w

Я написал учебное пособие по этому поводу с контроллером табличного представления, в котором есть все подробные сведения: Добавление панели поиска в представление таблицы в Swift