Tôi đang tìm cách có thể thêm một vị trí cá nhân vào MKLocationSearchCompletion
array
mà sẽ có thể được tìm thấy khi người dùng tìm kiếm thông qua thanh tìm kiếm. Tuy nhiên, tôi gặp sự cố khi hiểu cách các mục được lưu trữ vào các đối tượng và liệu tôi có thể thêm đối tượng dấu vị trí (hoặc thông tin vị trí) vào đối tượng MKLocationSearch
hay không. Những gì tôi đã có thể thu được từ tài liệu là đối tượng MKLocalSearchCompleter
lưu các chuỗi được truy cập khi người dùng nhập các chuỗi một phần vào thanh tìm kiếm. Nhưng tôi không chắc chắn nơi tôi có thể truy cập mảng này và thêm vị trí mới.Thêm các mục vào các Đối tượng
Sau đây là cách mã được cấu trúc để hiển thị kết quả tìm kiếm hoàn thành:
var searchCompleter = MKLocalSearchCompleter()
var searchResults = [MKLocalSearchCompletion]()
@IBOutlet weak var searchBar: UISearchBar!
override func viewDidLoad() {
searchCompleter.delegate = self
searchBar.delegate = self
}
extension ViewController: MKLocalSearchCompleterDelegate {
func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) {
searchResults = completer.results
searchResultsTableView.reloadData()
}
func completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error) {
// handle error
}
}
extension ViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return searchResults.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let searchResult = searchResults[indexPath.row]
let cell = UITableViewCell(style: .subtitle, reuseIdentifier: nil)
cell.textLabel?.attributedText = highlightedText(searchResult.title, inRanges: searchResult.titleHighlightRanges, size: 17.0)
cell.detailTextLabel?.attributedText = highlightedText(searchResult.subtitle, inRanges: searchResult.subtitleHighlightRanges, size: 12.0)
return cell
}
}
extension ViewController: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchCompleter.queryFragment = searchText
}
func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool {
self.searchBar.endEditing(true)
searchBar.resignFirstResponder()
return true
}
}
Tôi không hiểu khi nào câu lệnh chuyển đổi được thực hiện. Khi cellForRowAtIndexPath được gọi, mỗi hàng của tableview sẽ thực thi câu lệnh switch phải không? Tôi có thể nối thêm .customResult vào searchResults; tuy nhiên khi tôi đang tìm kiếm bằng thanh tìm kiếm, kết quả tùy chỉnh sẽ không hiển thị. – Kevin