2016-04-24 11 views
-1

ユーザーは任意の場所を検索できますが、別のView Controllerでその場所をアプリに保存するにはどうすればよいですか。言い換えれば、位置にタイトルのあるピンがあります。ユーザーがそのピンをタイトルと共にクリックし、次のビューに進むようにします。コントローラーにはタイトルが表示されます。 Swift 2でどうすればいいですか?スイフト2:ユーザーが地図上で検索した場所/場所を保存するにはどうすればよいですか?

ここまではピンを取得するためのコードです。ここに含まれていない住所を検索するコードもあります。私が望むのは、そのピンのタイトルをタップして別のView Controllerに行くことができるということです。マップの一部とそのピンを見ることができ、このView Controllerでもっと多くのことをすることができます。

protocol HandleMapSearch { 
func dropPinZoomIn(placemark:MKPlacemark) 
} 

class ViewController: UIViewController { 
    let locationManager = CLLocationManager() 
var resultSearchController:UISearchController? = nil 
var selectedPin:MKPlacemark? = nil 


@IBOutlet weak var mapView: MKMapView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.requestWhenInUseAuthorization() 
    locationManager.requestLocation() 

    // 
    let locationSearchTable =  storyboard!.instantiateViewControllerWithIdentifier("LocationSearchTable") as! LocationSearchTable 
    resultSearchController = UISearchController(searchResultsController: locationSearchTable) 
    resultSearchController?.searchResultsUpdater = locationSearchTable 
    // 
    let searchBar = resultSearchController!.searchBar 
    searchBar.sizeToFit() 
    searchBar.placeholder = "Search for places" 
    navigationItem.titleView = resultSearchController?.searchBar 
    // 
    resultSearchController?.hidesNavigationBarDuringPresentation = false 
    resultSearchController?.dimsBackgroundDuringPresentation = true 
    definesPresentationContext = true 
    // 
    locationSearchTable.mapView = mapView 
    // 
    locationSearchTable.handleMapSearchDelegate = self 
    // 
    let button = UIButton(type: UIButtonType.System) as UIButton 
    button.frame = CGRectMake(100, 100, 100, 50) 
    button.backgroundColor = UIColor.greenColor() 
    button.setTitle("Button", forState: UIControlState.Normal) 
    button.addTarget(self, action: "Action:", forControlEvents: UIControlEvents.TouchUpInside) 
    self.view.addSubview(button) 


} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


} 

extension ViewController : CLLocationManagerDelegate { 
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
    if status == .AuthorizedWhenInUse { 
     locationManager.requestLocation() 
    } 
} 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    if let location = locations.first { 
     let span = MKCoordinateSpanMake(0.05, 0.05) 
     let region = MKCoordinateRegion(center: location.coordinate, span: span) 
     mapView.setRegion(region, animated: true) 
    } 
} 
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) { 
    print("error:: \(error)") 
} 
} 

extension ViewController: HandleMapSearch { 
func dropPinZoomIn(placemark:MKPlacemark){ 
    // cache the pin 
    selectedPin = placemark 
    // clear existing pins 
    mapView.removeAnnotations(mapView.annotations) 
    let annotation = MKPointAnnotation() 
    annotation.coordinate = placemark.coordinate 
    annotation.title = placemark.name 
    if let city = placemark.locality, 
     let state = placemark.administrativeArea { 
     annotation.subtitle = "\(city) \(state)" 
    } 
    mapView.addAnnotation(annotation) 
    let span = MKCoordinateSpanMake(0.05, 0.05) 
    let region = MKCoordinateRegionMake(placemark.coordinate, span) 
    mapView.setRegion(region, animated: true) 

} 
} 
+0

あなたは何を求めているのかを明確にする必要があります。私の答えにあなたがしたコメントは意味をなさない。 –

+0

あきらめる前に、ここに少しの情報があります。マップビューデリゲートメソッド 'viewForAnnotation'を見てください。これにより、アノテーションのカスタムアノテーションビューを作成できます。 'MKAnnotationView'クラスとその' leftCalloutAccessoryView'と 'rightCalloutAccessoryView'プロパティを見てみましょう。 ( 'viewForAnnotation'メソッドを実装し、ピンのアノテーションにアクセサリービューを追加し、 'mapView:annotationView:calloutAccessoryControlTapped:'メソッドを実装する必要があります。 –

+0

Facebookのポストのようなもので、場所を検索して追加することができますビューコントローラでは、メインのView Controllerに戻り、その場所を投稿してコメントを追加できます。私が望むのは、どこの場所を検索することです(完了)、その場所はピンとして表示されます(上記のコードは完了です)。次にその場所をタップ/クリックして、別のView Controllerに移動します。そのビューコントローラのもの(Facebookのケースではコメントを追加します)。私はそれがより明確だと思う。 –

答えて

3

ようこそ。これはCS 101タイプの質問です。または多分iOS 101.

ロケーションはCLLocationオブジェクトとして始まります。これは、MKAnnotationプロトコルに準拠したオブジェクトとしてマップに保存されます。

キービットは場所です。CLLocationCoordinate2Dは単なる構造体です。

マップにピンを追加するときは、マップビューのaddAnnotationメソッドを呼び出して、注釈ピンを追加し、MKAnnotationプロトコルに準拠したオブジェクトを渡す必要があるため、緯度/経度を設定する必要がありますつまりcoordinateのプロパティを持っていることを意味します)。

これを動作させるのに役立つ部分はわかりません。どのようにマップピンのタップに応答するには?結果のコールアウトビューにボタンを追加するにはどうすればよいですか?コールアウトビューのボタンをタップしてストーリーボードから新しいView Controllerをインスタンス化して提示するにはどうすればよいですか?どのように他のビューコントローラにピンの座標を渡すには?

ユーザが単にピンをタップすると、別のビューコントローラがトリガされるのを防ぐことをお勧めします。ユーザーは、コールアウトビューを表示することを期待しています。しかし、あなたがしたいことが確実ならマップビューのデリゲートメソッドを実装するmapView:didSelectAnnotationView:

アクセサリビューでカスタムコールアウトビューを作成し、アクセサリビューにボタンを入れてユーザがアクセサリビューのボタンをタップすると、コントローラを表示します。

これを行う方法を示すコードを教えてください。私は読書を開始してそれを理解するために十分にあなたを与えました。 (私が持っているコードは、とにかくObjective-Cで書かれているので、それを理解するのは難しいでしょう。)

+0

私が理解していない部分は、結果のコールアウトビューにボタンを追加する方法です。私は信じている。ユーザーが場所を検索することができます、それは場所のタイトルとピンを取得します。私は、ユーザーがそのピンの上のそのタイトルをクリックして、同じ場所に保存された別のView Controllerに行くことができるようにしたい。どうしたらいいですか? –

+0

あなたは「ユーザーは場所を検索することができ、場所のタイトルを持つピンを取得できます」と述べました。どこ?マップアプリケーションでは?あなたがアプリケーションについて話しているなら、私が知っている内蔵機能はありません。ユーザーが場所を検索してその場所をピンとして地図に表示できる場所はありません。あなたは自分でコードを書く必要があります。コードを自分で作成した場合(または他の人からコピーして貼り付けた場合)は、そのコードの仕組みを説明する必要があります。変更する必要があるからです。 –

+0

それは私のアプリにあります。私はそれをコピーしなかった、私はそれを行う方法を学び、私はここで尋ねる理由は、私もそれを行う方法を学びたい。答えをありがとう、私を助けてくれてありがとう。ここで私は学んだところです:http://www.thorntech.com/2016/01/how-to-search-for-location-using-apples-mapkit/ –

関連する問題