File
⇒
New
⇒
File
(Файл
⇒
Создать
⇒
Файл).
Чтобы переключить контроллер табличного представления на использование
этого класса, выберите сцену
Locations
и в инспекторе идентичности введите
в поле
Custom Class
значение LocationsTableViewController.
Управление поиском
В iOS есть удобный класс
UISearchController
, упрощающий разработку пользо
-
вательского интерфейса поиска. Однако этот класс нельзя использовать в ре
-
дакторе раскадровки или в Interface Builder, поэтому нам придется создать его
вручную.
Откройте файл
LocationsTableViewController.swift
. Сначала удалим весь шаб-
лонный код, который Xcode добавляет автоматически, когда мы наследуем
класс
UITableViewController
. В результате должен получиться такой контроллер
представления:
import UIKit
class LocationsTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
// Источник данных для табличного представления
override func numberOfSections(in tableView: UITableView) >
Int {
// #warning Неполная реализация, должна вернуть число разделов
return 0
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section:
Int) > Int {
// #warning Неполная реализация, должна вернуть число записей
return 0
}
}
Теперь мы должны создать и сохранить контроллер поиска для последующе
-
го использования в начальном контроллере представления
LocationsTableView
Controller
. Как рассказывалось в обсуждении жизненного цикла контроллера
представления в главе 2, это делается путем переопределения метода
viewDid
Load
контроллера представления. Наш контроллер наследует класс
UITableView
Controller
, который, в свою очередь, наследует
UIViewController
, а значит, он об
-
ладает тем же набором методов.
Поиск в сети
349
Добавьте следующий код в тело метода
viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
let searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.delegate = self
searchController.searchBar.placeholder = "Search Locations by Country"
searchController.obscuresBackgroundDuringPresentation = false
definesPresentationContext = true
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
}
Этот код создает новый объект
UISearchController
и сохраняет его в перемен
-
ной
searchController
. Затем мы устанавливаем свойство
delegate
строки поиска
так, чтобы она вызывала контроллер каждый раз, когда пользователь пытается
выполнить поиск. Продолжим придерживаться этого протокола и пока про
-
игнорируем ошибку компилятора. Далее мы задаем текст-заполнитель для
панели поиска. В данном случае это просто строка Search Locations by Country
(Поиск местоположений по странам), но это может быть любой другой текст,
который вы решите отобразить, чтобы подсказать пользователям, что они мо
-
гут искать.
Следующие две строки необходимы для отображения результатов поиска.
В iOS для поддержки поиска используется
UISearchController
. Он имеет не
-
сколько свойств, которые нужно настроить, чтобы сделать поиск максимально
удобным. Первое свойство,
obscuresBackgroundDuringPresentation
, предотвращает
перекрытие контроллера поиска текущим контроллером представления, ко
-
торый используется для отображения результатов. Это важно, потому что при
инициализации контроллера поиска мы не предоставляем новый контроллер
searchResultsViewController
непосредственно, поэтому результаты будут ото
-
бражаться в этом же контроллере представления. Если этот контроллер пред
-
ставления окажется перекрыт представлением с результатами, пользователь
не сможет воспользоваться им повторно, а это очень неудобно.
В связи с этим мы также должны присвоить свойству
definePresentationCon
text
значение
true
, чтобы когда
UISearchController
будет отображать представ
-
ление с результатами, контроллер представления, в котором мы находимся,
предоставлял контекст для отображения результатов и панели поиска. По сути,
это означает, что этот контроллер представления будет скрывать панель поис
-
ка после перехода к другому представлению.
Наконец, мы записываем ссылку на только что созданный контроллер поис
-
ка в свойство
searchController
элемента навигации
navigationItem
. Это позволяет
родительскому контроллеру навигации, который управляет этим представле
-
нием, отобразить панель поиска в панели навигации. Мы также устанавливаем
свойство
hidesSearchBarWhenScrolling
, потребовав постоянно отображать панель
поиска.
Теперь нам нужно заставить наш контроллер представления придерживать
-
ся протокола
UISearchBarDelegate
. Этот протокол необходим для обновления
табличного представления, отображающего результаты поиска. При каждом
Do'stlaringiz bilan baham: |