지도 핀 segue로 사용자 지정 데이터 전달

켈 셰이크

맵 핀의 사용자 지정 변수를 Swift의 다른 뷰 컨트롤러로 전달하는 방법을 알아내는 데 문제가있었습니다. 주석을 추가 할 때 좌표, 제목 및 부제목을 전달할 수 있다는 것을 알고 있습니다. 맞춤 변수를 시도하고 전달하고 싶지만 숨겨져 있습니다. 그런 것이 있습니까? 아래에서는 사용자 위치를 가져 와서 매핑하고, 다른 뷰 컨트롤러로 이동하고 제목과 부제목 만 전달하는 주석과 함께 근처에있는 두 위치의 핀을 드롭합니다. 어떤 통찰력이라도 대단히 감사합니다.

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

var mappedCity = String()
var mappedState = String()

var manager = CLLocationManager()
var annotation:MKAnnotation!
var error:NSError!
var pointAnnotation:MKPointAnnotation!
var pinAnnotationView:MKPinAnnotationView!
var selectedAnnotation: MKPointAnnotation!

private var mapChangedFromUserInteraction = false

@IBOutlet var mapView: MKMapView!

override func viewDidLoad() {
    super.viewDidLoad()

    self.mapView.delegate = self
    self.navigationItem.titleView = searchController.searchBar
    self.definesPresentationContext = true


    if CLLocationManager.locationServicesEnabled(){
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.requestWhenInUseAuthorization()
        manager.startUpdatingLocation()

   }       

}


func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

    let userLocation:CLLocation = locations[0]
    let latitude = userLocation.coordinate.latitude
    let longitude = userLocation.coordinate.longitude

    let latDelta:CLLocationDegrees = 0.05
    let lonDelta:CLLocationDegrees = 0.05
    let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta)
    let location:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)
    let region:MKCoordinateRegion = MKCoordinateRegionMake(location, span)

    self.mapView.setRegion(region, animated: true)
    self.mapView.showsUserLocation = true

    CLGeocoder().reverseGeocodeLocation(userLocation) { (placemarks, error) in

        if (error != nil){

            print(error)

        }else {

            if let p = placemarks?[0]{

                let locality = p.locality ?? ""
                let administrativeArea = p.administrativeArea ?? ""


                self.mappedCity = String(locality)
                self.mappedState = String(administrativeArea)

                self.parseJSON("\(locality)", state: "\(administrativeArea)")
            }

        }



    }
 self.manager.stopUpdatingLocation()
}


func parseJSON(city: String, state: String){
    let passedCity = city
    let passedState = state
    let escapedCity = passedCity.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!
    let escapedState = passedState.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!

    let url = NSURL(string:"http://www.API.com/api.php?city=\(escapedCity)&stateAbv=\(escapedState)")!

    let session = NSURLSession.sharedSession()

    let task = session.dataTaskWithURL(url) { (items, response, error) -> Void in

        if error != nil {

            print(error)


        }else {


            if let items = items {


                do {
                    let jsonResult = try NSJSONSerialization.JSONObjectWithData(items, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary

                    if jsonResult.count > 0 {

                        if let datas = jsonResult["data"] as? NSArray{

                            for data in datas{

                                if let title = data["title"] as? String {

                                    if let street = data["street"] as? String {

                                        if let city =  data["city"] as? String {

                                            if let stateAbv =  data["stateAbv"] as? String {

                                                if let zip =  data["zip"] as? String {

                                                    self.geoAddress("\(title)", street: "\(street)", city: "\(city)", state: "\(stateAbv)", zip: "\(zip)")


                                                }
                                            }
                                        }

                                    }

                                }

                            }
                        }

                    }
                } catch{}


            }


        }

    }

    task.resume()

}


func geoAddress(title: String, street: String, city: String, state: String, zip: String){
    let storeName = "\(title)"
    let location = "\(street) \(city) \(state) \(zip)"
    let geocoder = CLGeocoder();
    geocoder.geocodeAddressString(location, completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in
        if (error != nil) {
            print("Error \(error!)")
        } else if let placemark = placemarks?[0] {

            let coordinates:CLLocationCoordinate2D = placemark.location!.coordinate

            let pointAnnotation:MKPointAnnotation = MKPointAnnotation()
            pointAnnotation.coordinate = coordinates
            pointAnnotation.title = storeName
            pointAnnotation.subtitle = location

            self.mapView.addAnnotation(pointAnnotation)

        }
    })
}


private func mapViewRegionDidChangeFromUserInteraction() -> Bool {
    let view: UIView = self.mapView.subviews[0] as UIView
    //  Look through gesture recognizers to determine whether this region change is from user interaction
    if let gestureRecognizers = view.gestureRecognizers {
        for recognizer in gestureRecognizers {
            if( recognizer.state == UIGestureRecognizerState.Began || recognizer.state == UIGestureRecognizerState.Ended ) {
                return true
            }
        }
    }
    return false
}

func mapView(mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
    mapChangedFromUserInteraction = mapViewRegionDidChangeFromUserInteraction()
    if (mapChangedFromUserInteraction) {
        // user changed map region

    }
}

func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
    if (mapChangedFromUserInteraction) {
        // user changed map region
        let center = mapView.centerCoordinate

        let mapLatitude = center.latitude
        let mapLongitude = center.longitude


        let locationmove = CLLocation(latitude: mapLatitude, longitude: mapLongitude)
        CLGeocoder().reverseGeocodeLocation(locationmove) { (placemarks, error) in

            if (error != nil){

                print(error)

            }else {

                if let p = placemarks?[0]{

                    let locality = p.locality ?? ""
                    let administrativeArea = p.administrativeArea ?? ""


                     self.mappedCity = String(locality)
                     self.mappedState = String(administrativeArea)
                     self.parseJSON("\(locality)", state: "\(administrativeArea)")
                }

            } 

        }
    }
}



func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
    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?.animatesDrop = false
        pinView?.canShowCallout = true
        pinView?.draggable = true
        pinView?.pinTintColor = UIColor.greenColor()
        let rightButton: AnyObject! = UIButton(type: UIButtonType.DetailDisclosure)
        pinView?.rightCalloutAccessoryView = rightButton as? UIView
    }
    else {
        pinView?.annotation = annotation
    }

    return pinView
}

func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
    if control == view.rightCalloutAccessoryView {
        selectedAnnotation = view.annotation as? MKPointAnnotation
        performSegueWithIdentifier("Details", sender: self)
    }
}

func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, didChangeDragState newState: MKAnnotationViewDragState, fromOldState oldState: MKAnnotationViewDragState) {
    if newState == MKAnnotationViewDragState.Ending {
        let droppedAt = view.annotation?.coordinate
        print(droppedAt)
    }
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

   if (segue.identifier == "Details"){
   let myDetails = segue.destinationViewController as! DetailViewController
     myDetails.mytitle = selectedAnnotation.title
     myDetails.mysubtitle = selectedAnnotation.subtitle

    }

}


func updateSearchResultsForSearchController(searchController: UISearchController) {


}


}
수리야 수 벤티 란

Subclass"MKPointAnnotation"클래스에 추가하십시오 custom property.

class MyAnnotation : MKPointAnnotation {
    var customProperty : String?
}

그리고 MyAnnotation대신 사용할 수 있습니다 MKPointAnnotation. 다음과 같이

 let pointAnnotation:MyAnnotation = MyAnnotation()
 pointAnnotation.coordinate = coordinates
 pointAnnotation.title = storeName
 pointAnnotation.subtitle = location
 pointAnnotation.customProperty = "your value"
 self.mapView.addAnnotation(pointAnnotation)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

사용자 지정 segue에서 데이터 전달

분류에서Dev

데이터 전달 오류가있는 사용자 지정 셀 segue-Swift

분류에서Dev

Xamarin Forms 사용자 지정지도 핀

분류에서Dev

Google지도-사용자 정의 아이콘이 여전히 표시되고 가려지는 기본 핀

분류에서Dev

사용자 지정 데이터 ID로 모달로드

분류에서Dev

Bundle을 사용하여 사용자 지정 데이터 목록 전달

분류에서Dev

ReactSelect : 사용자 지정 렌더링에 사용할 추가 데이터 전달

분류에서Dev

사용자 지정 제품 텍스트 필드를 WooCommerce의 카트 항목 데이터로 전달

분류에서Dev

segue를 사용하지 않고 어떻게 viewController에서 다른 데이터로 많은 데이터를 전달할 수 있습니까?

분류에서Dev

객체 데이터를 전달하는 Angularjs 사용자 지정 지시문

분류에서Dev

사용자 지정 스핀 어댑터에 빈 목록 표시

분류에서Dev

Yii의 EDataTables에 사용자 지정 데이터를 전달하는 방법

분류에서Dev

request_futures의 예외에 사용자 지정 데이터 전달

분류에서Dev

ASP.NET Razor 양식 데이터가 전자 메일에 사용되는 변수로 전달되지 않음

분류에서Dev

segue로 데이터 전달

분류에서Dev

UITableView에서 UIViewController로 segue를 사용하여 데이터 전달

분류에서Dev

mysql 행을 데이터가있는 사용자 지정 열로 전치

분류에서Dev

AngularJS-자식에서 부모로 중첩 된 (사용자 지정) 지시문을 통해 데이터를 전달하는 방법

분류에서Dev

aspx 페이지에서 사용자 정의 컨트롤로 값 전달

분류에서Dev

사용자 지정 호스트 이름으로 ssh 포트 전달

분류에서Dev

프로그래밍 방식으로 생성 된 segue IOS를 사용하여 사용자 지정 전환 애니메이터 호출

분류에서Dev

사용자 지정 전환으로 모달 UIViewController 회전

분류에서Dev

obj에서 배열로 전달 된 요소와 사용자 데이터까지 추출하는 방법

분류에서Dev

MapKit에서 영숫자 표현이있는 사용자 지정 핀

분류에서Dev

로그 데이터 용 Excel 사용자 지정 숫자 형식

분류에서Dev

데이터 테이블 "정렬 기준"선택 레이블에 사용자 지정 텍스트 전달

분류에서Dev

Asynctask에서 사용자 지정 목록 어댑터 클래스로 목록보기에 대한 데이터 전달

분류에서Dev

지도를 사용하여 부모 구성 요소에서 자식 구성 요소로 데이터를 전달할 때 Angular ExpressionChangedAfterItHasBeenCheckedError

분류에서Dev

사용자 지정 키를 사용하여 데이터 프레임 목록을 사전 목록으로 변환

Related 관련 기사

  1. 1

    사용자 지정 segue에서 데이터 전달

  2. 2

    데이터 전달 오류가있는 사용자 지정 셀 segue-Swift

  3. 3

    Xamarin Forms 사용자 지정지도 핀

  4. 4

    Google지도-사용자 정의 아이콘이 여전히 표시되고 가려지는 기본 핀

  5. 5

    사용자 지정 데이터 ID로 모달로드

  6. 6

    Bundle을 사용하여 사용자 지정 데이터 목록 전달

  7. 7

    ReactSelect : 사용자 지정 렌더링에 사용할 추가 데이터 전달

  8. 8

    사용자 지정 제품 텍스트 필드를 WooCommerce의 카트 항목 데이터로 전달

  9. 9

    segue를 사용하지 않고 어떻게 viewController에서 다른 데이터로 많은 데이터를 전달할 수 있습니까?

  10. 10

    객체 데이터를 전달하는 Angularjs 사용자 지정 지시문

  11. 11

    사용자 지정 스핀 어댑터에 빈 목록 표시

  12. 12

    Yii의 EDataTables에 사용자 지정 데이터를 전달하는 방법

  13. 13

    request_futures의 예외에 사용자 지정 데이터 전달

  14. 14

    ASP.NET Razor 양식 데이터가 전자 메일에 사용되는 변수로 전달되지 않음

  15. 15

    segue로 데이터 전달

  16. 16

    UITableView에서 UIViewController로 segue를 사용하여 데이터 전달

  17. 17

    mysql 행을 데이터가있는 사용자 지정 열로 전치

  18. 18

    AngularJS-자식에서 부모로 중첩 된 (사용자 지정) 지시문을 통해 데이터를 전달하는 방법

  19. 19

    aspx 페이지에서 사용자 정의 컨트롤로 값 전달

  20. 20

    사용자 지정 호스트 이름으로 ssh 포트 전달

  21. 21

    프로그래밍 방식으로 생성 된 segue IOS를 사용하여 사용자 지정 전환 애니메이터 호출

  22. 22

    사용자 지정 전환으로 모달 UIViewController 회전

  23. 23

    obj에서 배열로 전달 된 요소와 사용자 데이터까지 추출하는 방법

  24. 24

    MapKit에서 영숫자 표현이있는 사용자 지정 핀

  25. 25

    로그 데이터 용 Excel 사용자 지정 숫자 형식

  26. 26

    데이터 테이블 "정렬 기준"선택 레이블에 사용자 지정 텍스트 전달

  27. 27

    Asynctask에서 사용자 지정 목록 어댑터 클래스로 목록보기에 대한 데이터 전달

  28. 28

    지도를 사용하여 부모 구성 요소에서 자식 구성 요소로 데이터를 전달할 때 Angular ExpressionChangedAfterItHasBeenCheckedError

  29. 29

    사용자 지정 키를 사용하여 데이터 프레임 목록을 사전 목록으로 변환

뜨겁다태그

보관