Próbuję dodać przycisk do moich objazdów, dzięki czemu mogę przejść do innego kontrolera widoku. Objaśnienia jednak nie pokazują widoku akcesoriów i nie jestem pewien, dlaczego. Chwyciłem dane z Firebase i podawałem go do właściwych tablic, a następnie mam adnotację opublikowaną z wywołaniem. Nie jestem pewien, dlaczego przycisk nie pojawia się.

Ten kod odbywa się w ramach 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)


        }

Użyłem również tej funkcji.

 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
}

Edytuj: Żądany obraz

1
Taylor Simpson 17 luty 2017, 05:44

2 odpowiedzi

Najlepsza odpowiedź

Zrobiłem bardzo głupi błąd ... Zapomniałem umieścić Map.delegate.self, więc ma sens, że funkcja nigdy nie została wezwana. Przycisk teraz pokazuje podziękowania wszystkim za pomoc!

0
Taylor Simpson 18 luty 2017, 01:16

Twoja kontrola przepływu jest dziwna

Dlaczego tylko kiedy if annotationView == nil Następnie dodajesz CallOutaccessoryview ??

Wypróbuj ten kod:

if annotationView == nil{
    annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "Pin")  
}else{
    annotationView?.annotation = annotation
}
annotationView?.canShowCallout = true
annotationView?.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)

I zgaduję, że self.Map.dequeueReusableAnnotationView(withIdentifier: "Pin") może zwrócić zero, ponieważ nie widzę tego swojego kodu

Wartość zwracana

Widok adnotacji z określonym identyfikatorem lub zero, jeśli w kolejce ponownego użycia nie ma takiego obiektu.

Ale kiedy to! = Nil. Musisz też dodać akcesorium

0
Community 20 czerwiec 2020, 09:12