2017-08-14 18 views
0

textFieldをタイトルに使用してmapViewアノテーションを作成するには、textFieldのアラートコントローラを使用しようとしています。私が作成したすべての定数を印刷することはできますが、注釈は機能しません。 alertActionの外に注釈コードを使用するとうまくいきますが、textFieldの入力を取得できません。私は間違って何をしていますか?Swift AlertControllerを使用してmapViewに注釈を追加する

override func viewDidLoad() { 
    super.viewDidLoad() 

    let uilpgr = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longpress(gestureRecognizer:))) 
    uilpgr.minimumPressDuration = 2 
    map.addGestureRecognizer(uilpgr) 

} 

func longpress(gestureRecognizer: UIGestureRecognizer) { 

    let alert = UIAlertController(title: "New Place", message: "Enter a name", preferredStyle: UIAlertControllerStyle.alert) 

    alert.addTextField { (textField: UITextField) in 
     textField.placeholder = "Name" 
    } 

    let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) { (UIAlertAction) in 

     if let tempPlace = alert.textFields?[0].text { 
      let place = tempPlace 
      let touchpoint = gestureRecognizer.location(in: self.map) 
      let coordinate = self.map.convert(touchpoint, toCoordinateFrom: self.map) 
      let annotation = MKPointAnnotation() 
      let latitude = coordinate.latitude 
      let longitude = coordinate.longitude 

      annotation.title = place 
      annotation.subtitle = "Lat " + (String(format: "%.2f", latitude) + " Lon " + String(format: "%.2f", longitude)) 
      annotation.coordinate = coordinate 
      self.map.addAnnotation(annotation) 
     } 


    } 

    let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel) { (UIAlertAction) in 

    } 


    alert.addAction(okAction) 
    alert.addAction(cancelAction) 

    present(alert, animated: true, completion: nil) 

} 

答えて

0

ちょうどUIAlertControllerプレゼンテーションの前にタッチポイントを保存しているためUIAlterActionでそれを使用するときに現在の警告ポップオーバー/ longpressそれは保存/タッチポイントを取得することはできませんがUIAlterAction内部のタッチポイントが常にある理由0,0という。

func longpress(gestureRecognizer: UIGestureRecognizer) { 

let touchpointtemp = gestureRecognizer.location(in: self.map_home) 

let alert = UIAlertController(title: "New Place", message: "Enter a name", preferredStyle: UIAlertControllerStyle.alert) 

    alert.addTextField { (textField: UITextField) in 
     textField.placeholder = "Name" 
    } 

    let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) { (UIAlertAction) in 

     if let tempPlace = alert.textFields?[0].text { 
      let place = tempPlace 
      let touchpoint = touchpointtemp 
      let coordinate = self.map_home.convert(touchpoint, toCoordinateFrom: self.map_home) 

      print(coordinate) 
      let annotation = MKPointAnnotation() 
      let latitude = coordinate.latitude 
      let longitude = coordinate.longitude 

      annotation.title = place 
      annotation.subtitle = "Lat " + (String(format: "%.2f", latitude) + " Lon " + String(format: "%.2f", longitude)) 
      annotation.coordinate = coordinate 
      self.map_home.addAnnotation(annotation) 
     } 


    } 

    let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel) { (UIAlertAction) in 

    } 


    alert.addAction(okAction) 
    alert.addAction(cancelAction) 

    present(alert, animated: true, completion: nil) 

} 
関連する問題