我正在使用MKMapView搜索位置。我可以在地图上搜索位置,但是在这里[[如何将其Cityname and Street and pincode
发送到有关文本字段pincodeField , cityField, streetField
。
class RegistrationViewController1: UIViewController, CLLocationManagerDelegate, UISearchBarDelegate {
@IBOutlet weak var pincodeField: UITextField!
@IBOutlet weak var cityField: UITextField!
@IBOutlet weak var streetField: UITextField!
let searchCont = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
self.locationManager.requestAlwaysAuthorization()
if CLLocationManager.locationServicesEnabled() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.startUpdatingLocation()
}
@IBAction func searchLocationButton(_ sender: Any) {
let searchCont = UISearchController(searchResultsController: nil)
searchCont.searchBar.delegate = self
searchCont.searchBar.backgroundColor = .blue
present(searchCont, animated:true, completion:nil)
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()
dismiss(animated: true, completion: nil)
//create the search request
let searchReq = MKLocalSearch.Request()
searchReq.naturalLanguageQuery = searchBar.text
let activeSearch = MKLocalSearch(request: searchReq)
activeSearch.start { (response, error) in
UIApplication.shared.endIgnoringInteractionEvents()
if response == nil{
print("error")
}
else{
let lat = response?.boundingRegion.center.latitude
let long = response?.boundingRegion.center.longitude
self.annotation.title = searchBar.text
self.annotation.coordinate = CLLocationCoordinate2DMake(lat!, long!)
self.mapView.addAnnotation(self.annotation)
//zooming annotation
let coordinate: CLLocationCoordinate2D = CLLocationCoordinate2DMake(lat!, long!)
let span = MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1)
let region = MKCoordinateRegion(center: coordinate, span: span)
self.mapView.setRegion(region, animated: true)
}
}
}
}
在上面的代码中,如何将搜索到的位置名称,街道,密码输入到其文本字段..以便我们可以将其传递给JSON参数。我能够在搜索到的地方删除注释,但是如何将其城市名称发送到其cityField ..用代码帮助我。
CLGeocoder *geocoder = [CLGeocoder new];
CLLocation *newLocation = [[CLLocation alloc]initWithLatitude:21.1700
longitude:72.8300];
[geocoder reverseGeocodeLocation:newLocation
completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
NSLog(@"Geocode failed with error: %@", error);
return; // Request failed, log error
}
// Check if any placemarks were found
if (placemarks && placemarks.count > 0)
{
CLPlacemark *placemark = placemarks[0];
// Dictionary containing address information
NSDictionary *addressDictionary =
placemark.addressDictionary;
// Extract address information
NSLog(@"%@ ", addressDictionary);
NSString *address = [addressDictionary
objectForKey:(NSString *)kABPersonAddressStreetKey];
NSString *city = [addressDictionary
objectForKey:(NSString *)kABPersonAddressCityKey];
NSString *state = [addressDictionary
objectForKey:(NSString *)kABPersonAddressStateKey];
NSString *zip = [addressDictionary
objectForKey:(NSString *)kABPersonAddressZIPKey];
NSLog(@"%@ %@ %@ %@", address,city, state, zip);
}
}];
更新:您的代码可以快速尝试假设您有
var currentLocation : CLLocation!
使用此功能获取地址
func getAdress(completion: @escaping (_ address: String?, _ error: Error?) -> ()){ let geoCoder = CLGeocoder() geoCoder.reverseGeocodeLocation(self.currentLocation) { placemarks, error in if let e = error{ completion(nil, e) } else { let placeArray = placemarks var placemark: CLPlacemark! placemark = placeArray?[0] // guard let address = placemark.addressDictionary as? JSONDictionary else { // return // } let street = placemark.thoroughfare != nil ? placemark.thoroughfare! : "" let city = placemark.subAdministrativeArea != nil ? placemark.subAdministrativeArea! : "" let state = placemark.administrativeArea != nil ? placemark.administrativeArea! : "" let zip = placemark.isoCountryCode != nil ? placemark.administrativeArea! : "" let country = placemark.country != nil ? placemark.administrativeArea! : "" // let address = "\(street) \(city) \(state) \(zip) \(country) " completion(address, nil) } } }
用法是
if self.currentLocation != nil { self.getAdress { (jsonDict, error) in if error != nil { return } else { //let classObj = LocationOrganizer(jsonDict: jsonDict!) let classObj = LocationOrganizer(str: jsonDict!) print(classObj) } } }
并且LocationOrganizer类是:
class LocationOrganizer { var locationString : String! init(str: String) { self.locationString = str } }