ユーザーは任意の場所を検索できますが、別の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)
}
}
あなたは何を求めているのかを明確にする必要があります。私の答えにあなたがしたコメントは意味をなさない。 –
あきらめる前に、ここに少しの情報があります。マップビューデリゲートメソッド 'viewForAnnotation'を見てください。これにより、アノテーションのカスタムアノテーションビューを作成できます。 'MKAnnotationView'クラスとその' leftCalloutAccessoryView'と 'rightCalloutAccessoryView'プロパティを見てみましょう。 ( 'viewForAnnotation'メソッドを実装し、ピンのアノテーションにアクセサリービューを追加し、 'mapView:annotationView:calloutAccessoryControlTapped:'メソッドを実装する必要があります。 –
Facebookのポストのようなもので、場所を検索して追加することができますビューコントローラでは、メインのView Controllerに戻り、その場所を投稿してコメントを追加できます。私が望むのは、どこの場所を検索することです(完了)、その場所はピンとして表示されます(上記のコードは完了です)。次にその場所をタップ/クリックして、別のView Controllerに移動します。そのビューコントローラのもの(Facebookのケースではコメントを追加します)。私はそれがより明確だと思う。 –