temp 2806

 avatar
unknown
swift
3 years ago
2.4 kB
7
Indexable
struct EditProfileLocationPickerRepresentable: UIViewControllerRepresentable {
    
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }
    @Environment(\.presentationMode) var presentationMode
    @Binding var location: Location?
    
    func makeUIViewController(context: UIViewControllerRepresentableContext<EditProfileLocationPickerRepresentable>) -> GMSAutocompleteViewController {
        
        let autocompleteController = GMSAutocompleteViewController()
        autocompleteController.delegate = context.coordinator
        autocompleteController.configureCustomColors()
        
        
        // Specify the place data types to return.
        let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) | UInt(GMSPlaceField.placeID.rawValue) | UInt(GMSPlaceField.coordinate.rawValue) | UInt(GMSPlaceField.formattedAddress.rawValue))
        autocompleteController.placeFields = fields
        
        return autocompleteController
    }
    
    func updateUIViewController(_ uiViewController: GMSAutocompleteViewController, context: UIViewControllerRepresentableContext<EditProfileLocationPickerRepresentable>) {
    }
    
    class Coordinator: NSObject, UINavigationControllerDelegate, GMSAutocompleteViewControllerDelegate {
        
        var parent: EditProfileLocationPickerRepresentable
        
        init(_ parent: EditProfileLocationPickerRepresentable) {
            self.parent = parent
        }
        
        func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
            DispatchQueue.main.async {
                //print(place.description.description as Any)
                self.parent.location = Location(coordinate: place.coordinate, address: place.name ?? place.formattedAddress ?? "")
                self.parent.presentationMode.wrappedValue.dismiss()
            }
        }
        
        func viewController(_ viewController: GMSAutocompleteViewController, didFailAutocompleteWithError error: Error) {
            print("Error: ", error.localizedDescription)
        }
        
        func wasCancelled(_ viewController: GMSAutocompleteViewController) {
            parent.presentationMode.wrappedValue.dismiss()
        }
    }
}

// usage example in ViewSwiftUIName.swift:
EditProfileLocationPickerRepresentable(location: $viewModel.myLocation)
Editor is loading...