2015-10-29 3 views
0

Я проектирую гео-приложение. Я хочу сделать такую ​​вещь, как отправку моих местоположений в текстовое поле, нажав на кнопку.Как я могу отправить свою геолокацию в текст, нажав кнопку?

Сейчас я написал такую ​​функцию:

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

    print (locations) 
    let UserLocation:CLLocation = locations[0] 

    CLGeocoder().reverseGeocodeLocation(UserLocation) { (placemarks, error) -> Void in 

     if error != nil { 
      print(error) 
     } else { 
      let p = placemarks?.first 

      print p 


     } 

    } 


} 

Метод CLGeocoder помогает мне получить адрес от расположения. Теперь я хочу, нажав на мою кнопку отправить этот адрес в моей TextField

Должен ли я писать один и тот же код в

@IBAction func MyLocationBtn(sender: AnyObject) { 


} 

Или как я могу использовать некоторые мою функцию, чтобы получить к этим данным? если да, то можете ли вы помочь мне, как я могу вызвать эту функцию и получить р

ответ

1

Так у вас есть два трудоемкие операции:

  1. Получение местоположение пользователя
  2. Получение адреса от места расположения.

Я не думаю, что ваш подход правильный, потому что каждый раз при изменении местоположения пользователя вы запрашиваете CLCGeocoder для получения информации.

Я предполагаю, что вы держите ссылку на LocationManager в своем ViewController. На мой взгляд, вы можете попробовать:

@IBAction func MyLocationBtn(sender: AnyObject) { 
    let userLocation = locationManager.location // returns last user location 
    if userLocation == nil { 
      return 
    } 

    CLGeocoder().reverseGeocodeLocation(userLocation) { (placemarks, error) -> Void in 

     if error != nil { 
      print(error) 
     } else { 
      let p = placemarks?.first 

      self.yourTextField.text = ABCreateStringWithAddressDictionary(p.addressDictionary, true) 

     } 

    } 
} 

Вы также можете отключить ваш MyLocationBtn прежде чем вы получите местоположение пользователя.

override func viewDidLoad() { 
     super.viewDidLoad() 
     YOUR_BUTTON.enabled = false 
} 

и включить его, когда вы получаете местоположение пользователя:

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

     print (locations) 
     let UserLocation:CLLocation = locations[0] 
     if UserLocation != nil { 
      YOUR_BUTTON.enabled = true 
     } 
} 

См docs для ABCreateStringWithAddressDictionary.

EDIT:

Если вы хотите, чтобы не путать пользователя (когда скорость интернет-соединения низкая) пытаются отобразить индикатор активности, когда пользователь нажимает на кнопке и скрыть его, когда вы получаете меткам.

Смежные вопросы