Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Alamofire闭包中添加注释_Ios_Swift_Annotations_Mkmapview - Fatal编程技术网

Ios 在Alamofire闭包中添加注释

Ios 在Alamofire闭包中添加注释,ios,swift,annotations,mkmapview,Ios,Swift,Annotations,Mkmapview,我正在尝试在地图上添加注释,其中的位置和标题标签来自服务器,我尝试这样做 Services.MyService(pagingParams: pagingparam1, completed: {ret in self.getAdverts = ret for elements in self.getAdverts{ let coordinates : CLLocationCoordinate2D = CL

我正在尝试在地图上添加注释,其中的位置和标题标签来自服务器,我尝试这样做

Services.MyService(pagingParams: pagingparam1, completed: {ret in
        self.getAdverts = ret
        for elements in self.getAdverts{
              
                let coordinates : CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: CLLocationDegrees(elements.LOCATIONS[0])!, longitude: CLLocationDegrees(elements.LOCATIONS[1])!)
                pinCords.coordinate = coordinates
                pinCords.title = String(elements.PRICE!)
                self.map.addAnnotation(pinCords)
           
        }


    })
在MKMapViewDelegate中,我尝试显示注释:

extension MapViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
       if annotation is MKUserLocation == true
    {

        return nil
    }
    
           let av = MKAnnotationView(annotation: annotation, reuseIdentifier: "offercount")

    let annoIcon = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
    annoIcon.contentMode = .scaleAspectFit
   
    annoIcon.image = UIImage(named: "cancel-red")
    
    lbl.text = annotation.title!

    lbl.backgroundColor = UIColor.clear
    lbl.textAlignment = .center
    lbl.textColor = .white
    lbl.alpha = 1
    lbl.numberOfLines = 1
    lbl.adjustsFontSizeToFitWidth = true

    lbl.font = UIFont.systemFont(ofSize: 12)

    lbl.layer.masksToBounds = true
    


    av.backgroundColor = AreaColors.advertColor
    av.canShowCallout = true
    av.frame = CGRect(x: 0, y: 0, width: annoIcon.frame.size.width + lbl.frame.size.width + 4, height: 20)
    av.layer.cornerRadius = av.layer.bounds.height/4
    
    let pinlbl = UILabel(frame: CGRect(x:av.layer.bounds.width/2-10, y:av.layer.bounds.height-10, width:20, height:20))
    pinlbl.layer.masksToBounds = true
    pinlbl.layer.cornerRadius = 20
    pinlbl.backgroundColor = AreaColors.advertColor
    av.addSubview(pinlbl)
    av.addSubview(annoIcon)
    av.addSubview(lbl)


    return av
}
绿色视图中有一个标签,图像在下面

只有1个
annocation.title
出现,其他人没有。但是,当我单击任何注释时,我都可以看到标题


我认为问题在于异步闭包,但我真的没有解决它。我做错了什么吗?

看起来您正在重用
lbl
并将其添加到每个批注中,因此您只能在最后一个批注中看到它。您必须为每个注释创建新的
UILabel
,并将其作为子视图添加,方法与使用
pinlbl
相同,因为您现在要做的是从上一个注释中删除
lbl
,然后将其重新添加到下一个注释中,直到它停止并将其保留在地图上的最后一个注释中

只需更改以下内容

annoIcon.image = UIImage(named: "cancel-red")
// create new label here
let lbl = UILabel()

// the rest of your code can stay the same

谢谢,我做了很多工作。我使用annocation.title将价格数据发送到annocation,当我单击annocation时,将显示annocation title。我只是用它来发送数据到它里面。如何删除它?您不需要删除它,只需为**MKAnnotationView**的标题创建
UILabel
的新实例即可。可以在
注释中传递数据。title
查看我的更新答案。