Получить текст в строке поиска
Я хочу использовать панель поиска в своем приложении. Но я не мог найти никакого учебника для этого.
Мой вопрос прост: как я могу получить текст в строке поиска, когда пользователь вводит кнопку?
Мне нужно что-то вроде этого в моем контроллере:
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