目前我有一个地图视图设置了5个硬编码位置,这些位置在地图上用引脚显示。当用户点击这些引脚时,会向用户显示标注位置的详细信息。在这些标注中,我试图包含一个用户可以按下的按钮,然后将它们带到另一个视图控制器。iOS - Swift - 如何添加一个按钮到MKPointAnnotaton - MapKit
下面是我有的当前代码,但是当我点击引脚时没有显示任何按钮,有没有人有任何想法我缺少什么或为了实现按钮需要做什么?
这是我的位置和当前用户位置的代码。
import UIKit
import MapKit
import CoreLocation
import SceneKit
class SecondViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate
{
@IBOutlet weak var mapView: MKMapView!
//Location manager property
let locationManager = CLLocationManager()
override func viewDidLoad()
{
super.viewDidLoad()
mapView.delegate = self
//Find the current location as soon as the view is loaded
self.locationManager.delegate = self
//Setting the accuracy
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
//So only location services are used within the app
self.locationManager.requestWhenInUseAuthorization()
//Start up the location manager and find current location
self.locationManager.startUpdatingLocation()
//Use blue pin to show the location to the user
self.mapView.showsUserLocation = true
//Array of dictionaries to store the locations
let locationData = [
//Radio City Tower
["name": "Radio City Tower",
"latitude": 53.4071551,
"longitude": -2.980798600000071],
//Metropolitian Cathedral
["name": "Metropolitian Catherdral",
"latitude": 53.40494649999999,
"longitude": -2.9684022999999797],
//Walker Art Gallery
["name": "Walker Art Gallery",
"latitude": 53.410068,
"longitude": -2.979666],
//Liver Buildings
["name": "Liver Buildings",
"latitude": 53.405808,
"longitude": -2.995859],
//St George's Hall
["name": "St George's Hall",
"latitude": 53.409277,
"longitude": -2.979946]
]
//Object for each dictionary in the locations array
var annotations = [MKPointAnnotation]()
//Populating the map with the location pins
for Dictionary in locationData {
let latitude = CLLocationDegrees(Dictionary["latitude"] as! Double)
let longitude = CLLocationDegrees(Dictionary["longitude"] as! Double)
let coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
let name = Dictionary["name"] as! String
let annotation = MKPointAnnotation()
//Apply to annotation
annotation.coordinate = coordinate
annotation.title = "\(name)"
annotations.append(annotation)
}
mapView.addAnnotations(annotations)
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Location Delegate Methods
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
//Gets the most current location
let location = locations.last
//gets the center of the last location
let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
//Creatng a region - Map will zoom to this
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: Double(0.004), longitudeDelta: Double(0.004)))
//Apply the map view to the region
self.mapView.setRegion(region, animated: true)
//Stop updating the location
self.locationManager.stopUpdatingLocation()
let currentLocation = CLLocationCoordinate2DMake(location!.coordinate.latitude, location!.coordinate.longitude)
//Adding an annotation to current user location
var pinAnnotation = MKPointAnnotation()
//Set pin coordinate to the users current location
pinAnnotation.coordinate = currentLocation
//Annotation title
pinAnnotation.title = "Current Location"
//Annotation subtitle
pinAnnotation.subtitle = "You are here!"
//Add the pin to the mapView
mapView.addAnnotation(pinAnnotation)
}
这里是标注中的按钮实现的代码(不工作)
func MapView(mapview: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryTapped control: UIControl!) {
if control == view.rightCalloutAccessoryView {
print(view.annotation?.title)
print(view.annotation?.subtitle)
//Perform segue to navigate to viewcontroller
}
}
func MapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
print("viewForAnnotation")
if(annotation is MKUserLocation) {
return nil
}
let reuseID = "pin"
var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseID) as? MKPinAnnotationView
if(pinView == nil) {
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseID)
pinView!.canShowCallout = true
pinView!.animatesDrop = true
}
var button = UIButton(type: .DetailDisclosure) as UIButton
pinView?.rightCalloutAccessoryView = button
return pinView
}
我可能失去了一些东西很简单,但我不知道是什么。我对iOS/Swift开发和MapKit都很陌生,所以请耐心等待。我也明白,这个问题多次被问过,我仍然无法解决这个问题。任何帮助表示赞赏,谢谢。
选中此相关的帖子了..> http://stackoverflow.com/questions/28225296/how-to-add-a-button-to-mkpointannotation – HowsThatMonkey
嗨,我已经使用这个职位和综合将代码添加到我的应用程序中并进行必要的更改。感谢您的评论,我很感激。 – starrybolt