我的地图上有20个引脚,每张单击时,单击时显示了带有场地名称的注释,右侧有一个标注按钮。我已经成功地将此按钮链接到了单个页面。事情是所有位置链接到同一页面。我想要20个单独的页面,每个页面指向特定的别针。我在网上发现的几乎所有示例都希望生成一个带有信息的单个页面。这是我拥有的代码。
import UIKit
import MapKit
import CoreLocation
class MapContollerViewController: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var mapView: MKMapView!
// NEED TO SET THIS INT SOMEWHERE DEPENDING ON WHICH LOCATION IS SELECTED
var venueNo: Int = 2
// MARK: - CLLocationManager
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
checkLocationAuthorizationStatus()
}
let locationManager = CLLocationManager()
func checkLocationAuthorizationStatus() {
if CLLocationManager.authorizationStatus() == .authorizedAlways {
mapView.showsUserLocation = true
} else {
locationManager.requestAlwaysAuthorization()
}
}
let regionRadius: CLLocationDistance = 800
func centerMapOnLocation(location: CLLocation) {
let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate,
regionRadius, regionRadius)
mapView.setRegion(coordinateRegion, animated: true)
}
override func viewDidLoad() {
let classInstance = MapContollerViewController() //swift allocates memory and creates an instance
classInstance.venueNo = 2
super.viewDidLoad()
mapView.delegate = self
let initialLocation = CLLocation(latitude: 56.457539, longitude: -2.9821680000000015)
//UNION
let artwork = Artwork(title: "The Union",
locationName: "Airlie Place",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.457539, longitude: -2.9821680000000015),
venueNo:1)
//changing value here but in wrong place
venueNo = 1
mapView.addAnnotation(artwork)
// TINSMITH
let artwork2 = Artwork(title: "The Tin Smith",
locationName: "11-13 Old Hawkhill",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.4594785, longitude: -2.980198400000063),
venueNo:2)
mapView.addAnnotation(artwork2)
// Grafters
let artwork3 = Artwork(title: "Grafters",
locationName: "Union Street",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.4588498, longitude: -2.9709077999999636),
venueNo:3)
mapView.addAnnotation(artwork3)
// The Bird & Bear
let artwork4 = Artwork(title: "The Bird & Bear",
locationName: "2 Whitehall Cres",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.4592973, longitude: -2.968744700000002),
venueNo:4)
mapView.addAnnotation(artwork4)
// The Salty Dog
let artwork5 = Artwork(title: "The Salty Dog",
locationName: "9 Crichton St",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.459916, longitude: -2.9701755999999477),
venueNo:5)
mapView.addAnnotation(artwork5)
// Jam Jar
let artwork6 = Artwork(title: "Jam Jar",
locationName: "2b Whitehall Cres",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.45916279999999, longitude: -2.9688820999999734),
venueNo:6)
mapView.addAnnotation(artwork6)
// Church
let artwork7 = Artwork(title: "Church",
locationName: "15 Ward Rd",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.4617273, longitude: -2.9758415000000014),
venueNo:7)
mapView.addAnnotation(artwork7)
// No'1s
let artwork8 = Artwork(title: "No'1s",
locationName: "1 Ward Rd",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.4618699, longitude: -2.9745715000000246),
venueNo:8)
mapView.addAnnotation(artwork8)
// Medina
let artwork9 = Artwork(title: "Medina",
locationName: "113 Nethergate",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.4576889, longitude: -2.9751609),
venueNo:9)
mapView.addAnnotation(artwork9)
// Westport
let artwork10 = Artwork(title: "Westport Bar",
locationName: "N Lindsay St",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.4606814, longitude: -2.975895000000037),
venueNo:10)
mapView.addAnnotation(artwork10)
// D'Arcy thompson
let artwork11 = Artwork(title: "D'Arcy Thompson",
locationName: "Old Hawkhill",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.4594204, longitude: -2.9805648999999903),
venueNo:11)
mapView.addAnnotation(artwork11)
// Tonic
let artwork12 = Artwork(title: "Tonic",
locationName: "141 Nethergate",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.4572926, longitude: -2.9762908000000152),
venueNo:12)
mapView.addAnnotation(artwork12)
// The Beer Kitchen
let artwork13 = Artwork(title: "The Beer Kitchen",
locationName: "10 S Tay St",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.457705, longitude: -2.975928000000067),
venueNo:13)
mapView.addAnnotation(artwork13)
// Braes
let artwork14 = Artwork(title: "Braes",
locationName: "Perth Rd",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.45660329999999, longitude: -2.9789081000000124),
venueNo:14)
mapView.addAnnotation(artwork14)
// The Nether Inn
let artwork15 = Artwork(title: "Nether Inn",
locationName: "134 Nethergate",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.4580593, longitude: -2.974011799999971),
venueNo:15)
mapView.addAnnotation(artwork15)
// The Underground
let artwork16 = Artwork(title: "Underground",
locationName: "25 S Tay St",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.4583296, longitude: -2.975921200000016),
venueNo:16)
mapView.addAnnotation(artwork16)
// George Orwell
let artwork17 = Artwork(title: "George Orwell",
locationName: "168 Perth Rd",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.4561959, longitude: -2.986077499999965),
venueNo:17)
mapView.addAnnotation(artwork17)
// Balcony Bar
let artwork18 = Artwork(title: "Balcony Bar",
locationName: "5 Ward Rd",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.4618648, longitude: -2.9748177999999825),
venueNo:18)
mapView.addAnnotation(artwork18)
// McDaniels
let artwork19 = Artwork(title: "McDaniels",
locationName: "34-36 Whitehall Cres",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.45888000000001, longitude: -2.969510000000014),
venueNo:19)
mapView.addAnnotation(artwork19)
// TheWest House
let artwork20 = Artwork(title: "The West House",
locationName: "2 West Port",
discipline: "Venue",
coordinate: CLLocationCoordinate2D(latitude: 56.45932519999999, longitude: -2.977865299999962),
venueNo:20)
mapView.addAnnotation(artwork20)
centerMapOnLocation(location: initialLocation)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
extension MapContollerViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView,
calloutAccessoryControlTapped control: UIControl) {
//* load page on click
print("button tapped",venueNo)
//working on this
if venueNo == 1{
performSegue(withIdentifier: "Home", sender: self)
}
if venueNo == 2{
performSegue(withIdentifier: "TinSmith", sender: self)
}
}
// 1
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
// 2
guard let annotation = annotation as? Artwork else { return nil }
// 3
let identifier = "marker"
var view: MKMarkerAnnotationView
// 4
if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
as? MKMarkerAnnotationView {
dequeuedView.annotation = annotation
view = dequeuedView
} else {
// 5
view = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: identifier)
view.canShowCallout = true
view.calloutOffset = CGPoint(x: -5, y: 5)
view.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
}
return view
}
}
和处理注释的脚本
import Foundation
import MapKit
import Contacts
class Artwork: NSObject, MKAnnotation {
let title: String?
let locationName: String
let discipline: String
let coordinate: CLLocationCoordinate2D
let venueNo: Int
init(title: String, locationName: String, discipline: String, coordinate: CLLocationCoordinate2D, venueNo : Int) {
self.title = title
self.locationName = locationName
self.discipline = discipline
self.coordinate = coordinate
self.venueNo = (venueNo)
super.init()
}
var subtitle: String? {
return locationName
}
}
我是Swift的新手,如果有人可以提供帮助,我会很乐意。我一直在试图弄清楚5天,所以我想我会提供帮助。
您可以区分注释取决于Artwork的Venueno属性:
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView,
calloutAccessoryControlTapped control: UIControl) {
guard let artwork = view.annotation as? Artwork else { return }
let annotaionVenueNo = artwork.venueNo
print("veneueNo = %d", annotaionVenueNo)
// do additional process depend on annotaionVenueNo
}