1

I have place picker sheet and whenever I select a place the keyboard remains stuck on the main screen, I can t hide

my place picker view:

struct PlacePicker: UIViewControllerRepresentable {

    
func makeCoordinator() -> GooglePlacesCoordinator {
    GooglePlacesCoordinator(self)
}
@Environment(\.presentationMode) var presentationMode
@Binding var address: String
@Binding var latitude: Double
@Binding var longitude: Double


func makeUIViewController(context: UIViewControllerRepresentableContext<PlacePicker>) -> GMSAutocompleteViewController {
    
    GMSPlacesClient.provideAPIKey("xxxxx")

    let autocompleteController = GMSAutocompleteViewController()
    autocompleteController.delegate = context.coordinator
    

    let fields: GMSPlaceField = GMSPlaceField(rawValue:UInt(GMSPlaceField.name.rawValue) |
                                                              UInt(GMSPlaceField.placeID.rawValue) |
                                                              UInt(GMSPlaceField.coordinate.rawValue) |
                                                              GMSPlaceField.addressComponents.rawValue |
                                                              GMSPlaceField.formattedAddress.rawValue)
    autocompleteController.placeFields = fields

    let filter = GMSAutocompleteFilter()
    filter.type = .address
    autocompleteController.autocompleteFilter = filter
    return autocompleteController
}

func updateUIViewController(_ uiViewController: GMSAutocompleteViewController, context: UIViewControllerRepresentableContext<PlacePicker>) {
}

class GooglePlacesCoordinator: NSObject, UINavigationControllerDelegate, GMSAutocompleteViewControllerDelegate {

    var parent: PlacePicker

    init(_ parent: PlacePicker) {
        self.parent = parent
    }

    func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
        DispatchQueue.main.async {
            print(place.description.description as Any)
            self.parent.address =  place.formattedAddress ?? "adresa gresita"
            self.parent.presentationMode.wrappedValue.dismiss()
            
            self.parent.latitude=place.coordinate.latitude
            self.parent.longitude=place.coordinate.longitude
        }
    }

    func viewController(_ viewController: GMSAutocompleteViewController, didFailAutocompleteWithError error: Error) {
        print("Error: ", error.localizedDescription)
    }

    func wasCancelled(_ viewController: GMSAutocompleteViewController) {
        parent.presentationMode.wrappedValue.dismiss()
    }

}

The way that I call the sheet:

@State var addressString: String = ""
@State var address = ""
@State var openPlacePicker = false



var body: some View{
    

       HStack{
                
                TextField("\(address)", text: $addressString)
                    .onTapGesture {
                        openPlacePicker.toggle()

                    }
              }.sheet(isPresented: $openPlacePicker) {
                                 PlacePicker()
                              }
           }
      
  }
   

How I can hide the keyboard after the placePicker selection of the location is done?
Can I add something to the PlacePicker class? Whenever the selection is done, to dismiss the keyboard or something?

HangarRash
  • 7,314
  • 5
  • 5
  • 32

1 Answers1

0

Use simple text instead.

Text("\(address)", text: $addressString)
                    .onTapGesture {
                        openPlacePicker.toggle()

                    }
dhaval123
  • 107
  • 11