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”元素

MKLocalSearch 不提供与本地 Apple 地图应用程序中的搜索相同的结果

无法将数组名称传递到 Swift 3 中的表视图中

MKMapItem 地标在 swift 中不可用

Swift 中的表视图页脚