2017-01-07 5 views
1

GoogleMarkerInfoWindowを返すためにこのコードを使用しています。swift 3は呼び出し後にmarkerinfowindowの内容を更新できませんAPI

func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? { 
     let customInfoWindow = Bundle.main.loadNibNamed("customInfoWindown", owner: self, options: nil)?[0] as! CustomInfoWindowns 
     customInfoWindow.title = "This is title" 
     return customInfoWindow 
} 

が、私はタイトルを更新したときに後どのように私は、コールAPIの後にこのラベルを更新するために行うことができます

func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? { 
     let customInfoWindow = Bundle.main.loadNibNamed("customInfoWindown", owner: self, options: nil)?[0] as! CustomInfoWindowns 
     let id = marker.userData as? String 
     UserManager.sharedInstance.getUserInfo(id, onComplete: {(content, error) in 
      let userModel = UserModel.convertStringToUserModel(content!) 
      DispatchQueue.main.async {     
       customInfoWindow.title = userModel.name // this code didn't work 
      } 
     })    
     return customInfoWindow 
} 

その後、私はこのラベルを更新することはできません、APIを呼び出しますか?

ありがとうございました!

+0

マップビューをリロードするasync試しを使用しているため、迅速な3で、それは '' DispatchQueue.main.async {customInfoWindow.title = userModel.name}です –

+0

DispatchQueue.main.async {customInfoWindow.title = userModel.name} 私は試してみましたが、うまくいきませんでした。 –

+0

'func mapView(_ mapView:GMSMapView、markerInfoWindowマーカー:GMSMarker) - > UIView? {return marker} ' このメソッドは、マーカーをクリックした後にGoogleマップlibによって自動的に呼び出されるため、このメソッドが呼び出される前にすべての処理ができません。 –

答えて

0

あなたは、メインスレッド上のUI更新、一度試してみてください

self.map.reloadInputViews() 
+0

が役に立たなかった –

+0

DispatchQueue.main.async {self.map.reloadInputViews()customInfoWindow.title = userModel.name}をあなたの 'Alamofire'ブロックの中に追加しましたか? – Nour

+0

はい、常にUIのメインスレッドで実行します –

関連する問題