Я пытаюсь передать текст из моих маркеров в MKMapView другому контроллеру представления, когда маркеры касаются. Я попробовал использовать один метод после чтения онлайн, но так как контроллер представления, которому я передаю текст, не имеет контроллера навигации, я не думаю, что он будет работать. Обратите внимание, что я также использую Firebase для извлечения данных, которые будут отображаться на маркерах, и причина, по которой контроллер представления выглядит странно, заключается в том, что я использую ISHPullUp
Визуальное представление: https://imgur.com/a/zEW64aY
Код из TopViewController (данные MKMapView и MKMarker)
var mainTitle = ""
.
Database.database().reference().child("posts").observeSingleEvent(of: .value, with: { (snapshot) in
for snap in snapshot.children {
let postSnap = snap as! DataSnapshot
if let dict = postSnap.value as? [String:AnyObject] {
let title = dict["title"] as! String
let locationName = dict["location"] as! String
let discipline = dict["category"] as! String
let coordinate = CLLocationCoordinate2D(latitude: dict["lat"] as! Double, longitude: dict["long"] as! Double)
let artwork = Artwork(title: title, locationName: locationName, discipline: discipline, coordinate: coordinate)
self.mapView.addAnnotation(artwork)
}
}
})
.
extension TopViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
guard let annotation = annotation as? Artwork else { return nil }
let identifier = "marker"
var view: MKMarkerAnnotationView
if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
as? MKMarkerAnnotationView {
dequeuedView.annotation = annotation
view = dequeuedView
} else {
view = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: identifier)
mainTitle = annotation.title!
}
return view
}
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
let myVC = storyboard?.instantiateViewController(withIdentifier: "bottom") as! BottomViewController // Didn't work
myVC.stringPassed = mainTitle
navigationController?.pushViewController(myVC, animated: true)
print(mainTitle)
}
}
Код из BottomViewController (View Controller, на который я пытаюсь отправить текст)
var stringPassed = ""
override func viewDidLoad() {
super.viewDidLoad()
toplabel.text = stringPassed
}
Код из ViewController
class ViewController: ISHPullUpViewController {
private func commonInit() {
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let contentVC = storyBoard.instantiateViewController(withIdentifier: "content") as! TopViewController
let bottomVC = storyBoard.instantiateViewController(withIdentifier: "bottom") as! BottomViewController
contentViewController = contentVC
bottomViewController = bottomVC
bottomVC.pullUpController = self
contentDelegate = contentVC
sizingDelegate = bottomVC
stateDelegate = bottomVC
}
}