我正在使用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
}
}