我只是试图在我的注释点添加一个细节按钮而被卡住,不幸的是,我不知道该怎么做。有人可以帮我吗?
下图显示了我想要实现的目标。谢谢!
MapKitViewController:
import UIKit import MapKit import CoreLocation class MapKitViewController: UIViewController, MKMapViewDelegate { let locationManager = CLLocationManager() @IBOutlet weak var nmapView: MKMapView! override func viewDidLoad() { super.viewDidLoad() locationManager.requestWhenInUseAuthorization() locationManager.startUpdatingLocation() let location = CLLocationCoordinate2D( latitude: 53.4265107, longitude: 14.5520357) let span = MKCoordinateSpanMake(0.05, 0.05) let region = MKCoordinateRegion(center: location, span: span) nmapView.setRegion(region, animated: true) nmapView.showsPointsOfInterest = false nmapView.showsUserLocation = true displayMarkers() } func displayMarkers() -> Void { let jsonURL: NSURL = NSURL(string: "http://jsonstring.com/")! var dataFromNetwork: NSData = NSData(contentsOfURL: jsonURL)! let json = JSON(data: dataFromNetwork) var jsonSize = json.count var todaysDate:NSDate = NSDate() var dateFormatter:NSDateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" var formattedDate:String = dateFormatter.stringFromDate(todaysDate) let annotationView = MKAnnotationView() let detailButton: UIButton = UIButton.buttonWithType(UIButtonType.DetailDisclosure) as UIButton annotationView.rightCalloutAccessoryView = detailButton for(var i = 0; i < jsonSize; i++) { if(json[i]["rozpoczecie"].stringValue == formattedDate) { let clubID = json[i]["id_klub"].stringValue let annotation = MKPointAnnotation() let (resultSet, err) = SD.executeQuery("SELECT * FROM Clubs WHERE ID = ?", withArgs: [clubID]) if(err != nil){println("blad")} else { for row in resultSet { let name = row["Name"]?.asString() let latitude = row["Latitude"]?.asDouble() let longitude = row["Longitude"]?.asDouble() annotation.title = name var markerLatitude: Double = latitude! var markerLongitude: Double = longitude! let location = CLLocationCoordinate2D(latitude: markerLatitude, longitude: markerLongitude) annotation.setCoordinate(location) annotation.subtitle = json[i]["nazwa"].stringValue } nmapView.addAnnotation(annotation) } } } }
您做对了,您只需要实现这些方法即可添加按钮以及标题和副标题
iOS 8和Xcode 6
import UIKit import MapKit import CoreLocation class MapKitViewController: UIViewController, MKMapViewDelegate { let locationManager = CLLocationManager() @IBOutlet weak var nmapView: MKMapView! override func viewDidLoad() { super.viewDidLoad() locationManager.requestWhenInUseAuthorization() locationManager.startUpdatingLocation() let location = CLLocationCoordinate2D( latitude: 53.4265107, longitude: 14.5520357) let span = MKCoordinateSpanMake(0.05, 0.05) let region = MKCoordinateRegion(center: location, span: span) nmapView.setRegion(region, animated: true) nmapView.showsPointsOfInterest = false nmapView.showsUserLocation = true displayMarkers() } // When user taps on the disclosure button you can perform a segue to navigate to another view controller func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) { if control == view.rightCalloutAccessoryView{ println(view.annotation.title) // annotation's title println(view.annotation.subtitle) // annotation's subttitle //Perform a segue here to navigate to another viewcontroller // On tapping the disclosure button you will get here } } // Here we add disclosure button inside annotation window func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { println("viewForannotation") if annotation is MKUserLocation { //return nil return nil } let reuseId = "pin" var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView if pinView == nil { //println("Pinview was nil") pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId) pinView!.canShowCallout = true pinView!.animatesDrop = true } var button = UIButton.buttonWithType(UIButtonType.DetailDisclosure) as UIButton // button with info sign in it pinView?.rightCalloutAccessoryView = button return pinView } func displayMarkers() -> Void { let jsonURL: NSURL = NSURL(string: "http://atnight.wtznc.com/json.php")! var dataFromNetwork: NSData = NSData(contentsOfURL: jsonURL)! let json = JSON(data: dataFromNetwork) var jsonSize = json.count var todaysDate:NSDate = NSDate() var dateFormatter:NSDateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" var formattedDate:String = dateFormatter.stringFromDate(todaysDate) let annotationView = MKAnnotationView() // Adding button here wont do anything so remove these two lines let detailButton: UIButton = UIButton.buttonWithType(UIButtonType.DetailDisclosure) as UIButton annotationView.rightCalloutAccessoryView = detailButton // For adding button we have to use a method named as viewForAnnotation for(var i = 0; i < jsonSize; i++) { if(json[i]["rozpoczecie"].stringValue == formattedDate) { let clubID = json[i]["id_klub"].stringValue let annotation = MKPointAnnotation() let (resultSet, err) = SD.executeQuery("SELECT * FROM Clubs WHERE ID = ?", withArgs: [clubID]) if(err != nil){println("blad")} else { for row in resultSet { let name = row["Name"]?.asString() let latitude = row["Latitude"]?.asDouble() let longitude = row["Longitude"]?.asDouble() annotation.title = name var markerLatitude: Double = latitude! var markerLongitude: Double = longitude! let location = CLLocationCoordinate2D(latitude: markerLatitude, longitude: markerLongitude) annotation.setCoordinate(location) annotation.subtitle = json[i]["nazwa"].stringValue } nmapView.addAnnotation(annotation) } } } } }
查看我的输出。