복붙노트

[SWIFT] 어떻게 MKPointAnnotation에 버튼을 추가하려면?

SWIFT

어떻게 MKPointAnnotation에 버튼을 추가하려면?

해결법


  1. 1.당신은 제목과 자막과 함께 버튼을 추가 구현이 방법이 단지 필요가 맞아요하고있다

    당신은 제목과 자막과 함께 버튼을 추가 구현이 방법이 단지 필요가 맞아요하고있다

     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)
                    }
                }
            }
        }
    }
    

    내 출력을 확인하십시오.

  2. from https://stackoverflow.com/questions/28225296/how-to-add-a-button-to-the-mkpointannotation by cc-by-sa and MIT license