当前位置: 首页 > 面试题库 >

如何使用Apple Map Kit实现地址的自动完成

林辰钊
2023-03-14
问题内容

我想自动填写用户的地址,就像该链接中google api提供的地址一样:

https://developers.google.com/maps/documentation/javascript/places-
autocomplete?hl=zh-
CN

如何使用Apple Map Kit实施相同的功能

我尝试使用地理编码器,例如,我这样写:

@IBAction func SubmitGeoCode(sender: AnyObject) {

    let address = "1 Mart"
    let coder = CLGeocoder()

    coder.geocodeAddressString(address) { (placemarks, error) -> Void in

        for placemark in placemarks! {

            let lines = placemark.addressDictionary?["FormattedAddressLines"] as? [String]

            for addressline in lines! {
                print(addressline)
            }
        }
    }
}

但是结果非常令人失望。

任何可用于实现此类功能的Apple API,还是我应该使用Google API?

谢谢


问题答案:

更新-我在 这里使用Swift 3
创建了一个简单的示例项目,因为原始答案是使用Swift
2编写的。

在iOS
9.3中MKLocalSearchCompleter,引入了一个新类,该类允许创建自动完成解决方案,您只需将queryFragment传递如下:

var searchCompleter = MKLocalSearchCompleter()
searchCompleter.delegate = self
var searchResults = [MKLocalSearchCompletion]()

searchCompleter.queryFragment = searchField.text!

然后使用来处理查询结果MKLocalSearchCompleterDelegate

extension SearchViewController: MKLocalSearchCompleterDelegate {

    func completerDidUpdateResults(completer: MKLocalSearchCompleter) {
        searchResults = completer.results
        searchResultsTableView.reloadData()
    }

    func completer(completer: MKLocalSearchCompleter, didFailWithError error: NSError) {
        // handle error
    }
}

并以适当的格式显示地址结果:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> 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
}

然后,您可以使用MKLocalCompletion对象实例化MKLocalSearch.Request,从而获得对MKPlacemark和所有其他有用数据的访问:

let searchRequest = MKLocalSearch.Request(completion: completion!)
let search = MKLocalSearch(request: searchRequest)
search.startWithCompletionHandler { (response, error) in
    if error == nil {
        let coordinate = response?.mapItems[0].placemark.coordinate
    }
}


 类似资料:
  • 问题内容: 我想获取启动程序的计算机的IP地址,然后将其发送到客户端,但是我总是得到0.0.0.1而不是真实的IP地址(例如127.0.0.1)。 我目前可以获取端口,但无法获取IP地址。 我怎么才能得到它? 最好的解决方案是能够使用。这是我目前正在做的事情: 编辑: 我知道我的思维方式走错了路。所以我的问题是:获得自己的IP地址的最佳方法是什么? 问题答案: 当您将套接字设为0.0.0.0时,这

  • 本文向大家介绍Shell脚本实现自动修改IP地址,包括了Shell脚本实现自动修改IP地址的使用技巧和注意事项,需要的朋友参考一下 作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名、ip信息、网关等配置。修改成特定的主机名在维护和管理方面也比较方便。如下脚本用途为:修改ip和主机名等相关信

  • 我想实现一个自动完成功能。目前我有一个包含JTextField的JPanel,当用户开始键入时,会出现一个包含几个选项的autocomplete(JPopupMenu)。 问题是它占用了文本字段的焦点,用户无法再键入。当我将焦点返回到文本字段时,用户不再有选项之间的导航(使用向上和向下按钮)。此外,对菜单的焦点不允许我截取它的KeyListener(不知道为什么),并且当我尝试处理文本字段端的输入

  • 问题内容: 我有兴趣在JFrame中提供自动补全框。触发机制将基于助记符(我认为),但是我不太确定“自动补全框”应使用什么(我希望在用户按下键时对结果进行过滤)。 您将如何实施?某种JFrame还是JPopupMenu? 我想知道这是如何实现的,所以请不要发布指向可用的[J] Components的链接。 问题答案: Sun的教程“使用Swing组件”中提供了 一个自动完成文本区域 的示例 。 它

  • 我试图用datalist html创建一个自动完成。这是我代码:

  • 本文向大家介绍自动完成的搜索框javascript实现,包括了自动完成的搜索框javascript实现的使用技巧和注意事项,需要的朋友参考一下 在很多需要搜索的网站, 都会有一个自动完成的搜索框. 方便用户查找他们想要的搜索词. 帮助用户快速找到自己想要的结果. 这种方式是比较友好的. 所以是比较提倡使用的. 我们这次就来实现这一效果. 我们通过两篇文章来进行讲解. 首先我们来完成界面的设计布局.