MKLocalSearch 到 Swift 中的表视图
Posted
技术标签:
【中文标题】MKLocalSearch 到 Swift 中的表视图【英文标题】:MKLocalSearch to table view in Swift 【发布时间】:2016-09-21 21:51:18 【问题描述】:我正在考虑使用核心位置和 MKLocalSearch 在本地搜索“杂货店”。
我认为我已关闭“本地搜索”,但我不确定如何处理结果。我正在使用 swift3 运行 xcode8。
我希望用商店名称、地址填充此表,并将 GPS 坐标传递给另一个“设置”过程的新视图控制器。
我希望有一个 youtube 链接(或说明)来正确设置 tableview,然后使用代码来填充来自 MKLocalSearch 的信息。
谢谢!
func updateSearchResultsForSearchController()
let request = MKLocalSearchRequest()
let span = MKCoordinateSpan(latitudeDelta: 0.025, longitudeDelta: 0.025)
let region = MKCoordinateRegion(center: (locationManager.location?.coordinate)!, span: span)
request.naturalLanguageQuery = "Grocery"
request.region = region
let search = MKLocalSearch(request: request)
search.start (localSearchResponse, error) -> Void in
print(localSearchResponse)
//Code needed here to fill table view
【问题讨论】:
【参考方案1】:您可以从本地搜索响应中提取您需要的必要数据,例如坐标、商店名称和地址,如下所示:
首先初始化一个空数组,该数组将用于填充您的 tableView:
var searchResults: [MKMapItem]()
接下来使用您的搜索响应填充此列表并使用新数据更新 tableView:
search.start (localSearchResponse, error) -> Void in
searchResults = localSearchResponse.mapItems
tableView.reloadData() // update the tableView data source
然后使用适当的结果格式更新您的 tableView:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let searchResult = searchResults[indexPath.row]
let cell = UITableViewCell(style: .Subtitle, reuseIdentifier: nil)
cell.textLabel?.text = searchResult.title
cell.detailTextLabel?.text = searchResult.subtitle
return cell
最后,如果您想将坐标数据传递给另一个 viewController,您可以通过传递整个数组来完成此操作,或者您很可能在选择单元格并传递与单元格关联的 mapItem 时想要这样做:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let searchResult = searchResults[indexPath.row]
let groceryViewController = // initialise the new viewController
groceryViewController.coordinate = searchResult.placemark.coordinate
// push the new viewController
self.navigationController?.pushViewController(groceryViewController, animated: true)
【讨论】:
以上是关于MKLocalSearch 到 Swift 中的表视图的主要内容,如果未能解决你的问题,请参考以下文章
reloadData 不会将完成处理程序的 dispatch_async 中的表视图重新加载到主线程
快速从 MKLocalSearch 对象中检索第一个“mapItem”元素