MKMapView 选择注解

Posted

技术标签:

【中文标题】MKMapView 选择注解【英文标题】:MKMapView Select Annotation 【发布时间】:2015-03-18 20:30:12 【问题描述】:

我是 swift 新手,目前正试图弄清楚如何获取有关用户选择的注释的数据。我有一个本地搜索功能,可以添加注释,在用户选择一个之后,我希望能够访问它。我正在尝试使用 selectedAnnotations,但它似乎不起作用。

本地搜索:

func performSearch()
    matchingItems.removeAll()
    let request = MKLocalSearchRequest()
    request.naturalLanguageQuery = searchTextField.text
    request.region = mapView.region

    let search = MKLocalSearch(request: request)

    search.startWithCompletionHandler((response:
        MKLocalSearchResponse!,
        error: NSError!) in

        if error != nil 
            println("Error occured in search: \(error.localizedDescription)")
         else if response.mapItems.count == 0 
            println("No matches found")
         else 
            println("Matches found")

            for item in response.mapItems as [MKMapItem] 
                println("Name = \(item.name)")
                println("Phone = \(item.phoneNumber)")

                self.matchingItems.append(item as MKMapItem)
                println("Matching items = \(self.matchingItems.count)")

                var annotation = MKPointAnnotation()
                annotation.coordinate = item.placemark.coordinate
                annotation.title = item.name
                annotation.subtitle = item.placemark.title
                self.mapView.addAnnotation(annotation)

            
        
    )

从那里我正在尝试使用

 var selectedAnnotations: [MKPointAnnotation]!
        // print signout location
        println(selectedAnnotations)

访问注解,但这只是返回“nil”

标注方法:

    @IBAction func signoutToLocationButton(sender: AnyObject) 
    // saves current user location
    PFGeoPoint.geoPointForCurrentLocationInBackground 
        (geoPoint: PFGeoPoint!, error: NSError!) -> Void in
        if error == nil 
            // do something with the new geoPoint
            println(geoPoint)

            var signoutLocation = PFObject(className: "SignoutLocation")
            signoutLocation["Location"] = geoPoint
            signoutLocation.saveInBackgroundWithBlock 
                (success: Bool, error: NSError!)-> Void in
                if (success) 
                    // has been saved
                
                else 
                    //went wrong
                
            

        

        // get location of where they are signing out to
        self.mapView.selectedAnnotations(AnyObject)
        // print signout location
       //  println(selectedAnnotations)





    

【问题讨论】:

您的代码正在创建一个名为“selectedAnnotations”的局部变量,它是一个空数组。您可能打算访问地图视图的 selectedAnnotations 属性(例如self.mapView.selectedAnnotations)。另外:你用什么方法检查选择? 用户选择按钮时调用的不同方法。你想让我也发布那个方法吗? 尝试更新代码以使用self.mapView.selectedAnnotations,如果仍有问题,请发布方法。如果按钮在注解的标注上,更简单的方法是使用 calloutAccessoryControlTapped 委托方法。 该按钮不在注释标注上。不过好吧,我会试试的。谢谢! 现在告诉我“(AnyObject).Protocol -> $T3' 与 '[AnyObject]' 不同” 【参考方案1】:

以下是如何使用selectedAnnotations 属性的示例:

if self.mapView.selectedAnnotations?.count > 0 

    if let ann = self.mapView.selectedAnnotations[0] as? MKAnnotation 

        println("selected annotation: \(ann.title!)")

        let c = ann.coordinate
        println("coordinate: \(c.latitude), \(c.longitude)")

        //do something else with ann...
    

(尽管您是否需要或想要在 // has been saved 块内部而不是外部执行此操作是您必须弄清楚的事情。)

【讨论】:

谢谢,我可以得到我想要返回的注释,但它的显示是这样的:“MKPointAnnotation: 0x170a47dd0”,我怎样才能得到注释的纬度/经度数据? 获取数据类似于创建注释时设置数据的方式。添加了获取答案坐标的示例。 等等,没关系,我解决了这个问题。谢谢!你是一个救生员!(:

以上是关于MKMapView 选择注解的主要内容,如果未能解决你的问题,请参考以下文章

iPhone MKMapView 注解聚类

在 MKMapView 中为不同的注解设置不同的动作

如何在 MKMapView 上添加的自定义注解中添加标题和副标题?

MKMapView 注释取消选择策略

MKMapView 注释第二次不可选择

如何从 MKMapView didSelect 注释更新封装的 SwiftUI 视图