2017-02-17 4 views
0

Я пытаюсь добавить кнопку в свои Callouts, чтобы я мог перейти на другой контроллер представления. Выноски, однако, не покажут аксессуар, и я не уверен, почему. Я беру некоторые данные из firebase и загружаю их в соответствующие массивы, тогда у меня есть аннотация, выложенная с вызовом. Я не знаю, почему кнопка не появляется.Как добавить кнопку в MapKit CallOuts Swift 3

Этот код происходит в 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 
} 

Edit: imgage просил

ответ

0

Я сделал очень глупый ошибку ... Я забыл поставить Map.delegate.self, поэтому имеет смысл, что функция никогда не называлась. Теперь кнопка показывает Спасибо всем за вашу помощь!

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. вам нужно добавить аксессуар в него тоже

+0

он не показывал кнопку, когда я использовал этот код. Только выноска с заголовком, но без кнопки –

+0

Можете ли вы захватить изображение своего аксессуара Callout ... Остается ли пустое пространство справа от аксессуара Callout? –

+0

Я добавил фотографию. Он не оставляет места там. –

Смежные вопросы