我正在尝试向Callouts添加一个按钮,以便我可以转换到另一个视图控制器。然而,标注不会显示附件视图,我不确定为什么。我从firebase获取了一些数据并将其输入到正确的数组中,然后我通过调出发布了注释。我不知道为什么按钮没有出现。
此代码在ViewDidLoad(){...}
中进行 bookRef.observeSingleEvent(of: .value, with: {snapshot in
if let userDict = snapshot.value as? [String:AnyObject]{
for each in userDict as [String:AnyObject]{
let bookLats = each.value["bookLat"] as! String
let bookLngs = each.value["bookLng"] as! String
let bookTitle = each.value["title"] as! String
let Author = each.value["Author"] as! String
let Comment = each.value["Comment"] as! String
let Genre = each.value["Genre"] as! String
let User = each.value["User"] as! String
let bookPhoto = each.value["bookPhoto"] as! String
let userID = each.value["userID"] as! String
let userLocation = each.value["userLocation"] as! String
let bookRate = each.value["bookRating"] as! String
let userToBePushed = each.value["pushingID"] as! String
self.bookLatArrayDouble.append((bookLats as NSString).doubleValue)
self.bookLngArrayDouble.append((bookLngs as NSString).doubleValue)
self.bookTitlesArray.append(bookTitle)
}
}
for i in 0...(self.bookLatArrayDouble.count-1){
let locationCoordinates = CLLocationCoordinate2D(latitude: self.bookLatArrayDouble[i], longitude: self.bookLngArrayDouble[i])
var point = BookAnnotation(coordinate: locationCoordinates)
point.title = self.bookTitlesArray[i]
self.Map.addAnnotation(point)
}
我也使用过这个功能。
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
// If annotation is not of type RestaurantAnnotation (MKUserLocation types for instance), return nil
var annotationView = self.Map.dequeueReusableAnnotationView(withIdentifier: "Pin")
if annotationView == nil{
annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "Pin")
annotationView?.canShowCallout = true
annotationView?.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
}else{
annotationView?.annotation = annotation
}
return annotationView
}
编辑:请求imgage
答案 0 :(得分:0)
你的流量控制很奇怪
为什么只在if annotationView == nil
然后你添加CalloutAccessoryView ??
试试这段代码:
if annotationView == nil{
annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "Pin")
}else{
annotationView?.annotation = annotation
}
annotationView?.canShowCallout = true
annotationView?.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
我猜我self.Map.dequeueReusableAnnotationView(withIdentifier: "Pin")
可能会返回nil,因为我没有看到你的代码
返回值
具有指定标识符的注释视图,如果重用队列中不存在此类对象,则为nil。
但是当它!=无。您还需要在其中添加附件
答案 1 :(得分:0)
我犯了一个非常愚蠢的错误...我忘了放Map.delegate.self
所以有意义的是函数从未被实际调用过。现在按钮显示谢谢大家的帮助!