mirror of
https://github.com/zhigang1992/react-native-google-place-picker.git
synced 2026-04-29 12:54:59 +08:00
update ios code
This commit is contained in:
@@ -1,11 +1,15 @@
|
||||
#import "RNGooglePlacePicker.h"
|
||||
#import "RCTEventDispatcher.h"
|
||||
#import <GooglePlaces/GooglePlaces.h>
|
||||
#import <GooglePlacePicker/GooglePlacePicker.h>
|
||||
#import <React/RCTConvert.h>
|
||||
|
||||
@interface RNGooglePlacePicker() <GMSPlacePickerViewControllerDelegate>
|
||||
|
||||
@end
|
||||
|
||||
@implementation RNGooglePlacePicker {
|
||||
GMSPlacePicker *_placePicker;
|
||||
GMSPlacePickerViewController *_placePicker;
|
||||
RCTResponseSenderBlock _callback;
|
||||
}
|
||||
|
||||
RCT_EXPORT_MODULE()
|
||||
@@ -14,39 +18,48 @@ RCT_EXPORT_MODULE()
|
||||
return dispatch_get_main_queue();
|
||||
}
|
||||
|
||||
- (void)placePicker:(GMSPlacePickerViewController *)viewController didPickPlace:(GMSPlace *)place {
|
||||
NSMutableDictionary *response = [[NSMutableDictionary alloc] init];
|
||||
if (place.formattedAddress) {
|
||||
[response setObject:place.formattedAddress forKey:@"address"];
|
||||
} else {
|
||||
[response setObject:[NSNull null] forKey:@"address"];
|
||||
}
|
||||
if (place.name) {
|
||||
[response setObject:place.name forKey:@"name"];
|
||||
} else {
|
||||
[response setObject:[NSNull null] forKey:@"name"];
|
||||
}
|
||||
if (place.placeID) {
|
||||
[response setObject:place.placeID forKey:@"google_id"];
|
||||
} else {
|
||||
[response setObject:[NSNull null] forKey:@"google_id"];
|
||||
}
|
||||
[response setObject:@(place.coordinate.latitude) forKey:@"latitude"];
|
||||
[response setObject:@(place.coordinate.longitude) forKey:@"longitude"];
|
||||
_callback(@[response]);
|
||||
[_placePicker dismissViewControllerAnimated:true completion:nil];
|
||||
}
|
||||
|
||||
- (void)placePickerDidCancel:(GMSPlacePickerViewController *)viewController {
|
||||
_callback(@[@{@"didCancel" : @YES}]);
|
||||
[_placePicker dismissViewControllerAnimated:true completion:nil];
|
||||
}
|
||||
|
||||
- (void)placePicker:(GMSPlacePickerViewController *)viewController didFailWithError:(NSError *)error {
|
||||
_callback(@[@{@"error" : error.localizedFailureReason}]);
|
||||
[_placePicker dismissViewControllerAnimated:true completion:nil];
|
||||
}
|
||||
|
||||
|
||||
RCT_EXPORT_METHOD(show:
|
||||
(RCTResponseSenderBlock) callback) {
|
||||
_callback = callback;
|
||||
GMSPlacePickerConfig *config = [[GMSPlacePickerConfig alloc] initWithViewport:nil];
|
||||
_placePicker = [[GMSPlacePicker alloc] initWithConfig:config];
|
||||
[_placePicker pickPlaceWithCallback:^(GMSPlace *place, NSError *error) {
|
||||
if (place) {
|
||||
NSMutableDictionary *response = [[NSMutableDictionary alloc] init];
|
||||
if (place.formattedAddress) {
|
||||
[response setObject:place.formattedAddress forKey:@"address"];
|
||||
} else {
|
||||
[response setObject:[NSNull null] forKey:@"address"];
|
||||
}
|
||||
if (place.name) {
|
||||
[response setObject:place.name forKey:@"name"];
|
||||
} else {
|
||||
[response setObject:[NSNull null] forKey:@"name"];
|
||||
}
|
||||
if (place.placeID) {
|
||||
[response setObject:place.placeID forKey:@"google_id"];
|
||||
} else {
|
||||
[response setObject:[NSNull null] forKey:@"google_id"];
|
||||
}
|
||||
[response setObject:@(place.coordinate.latitude) forKey:@"latitude"];
|
||||
[response setObject:@(place.coordinate.longitude) forKey:@"longitude"];
|
||||
callback(@[response]);
|
||||
} else if (error) {
|
||||
callback(@[@{@"error" : error.localizedFailureReason}]);
|
||||
|
||||
} else {
|
||||
callback(@[@{@"didCancel" : @YES}]);
|
||||
}
|
||||
}];
|
||||
|
||||
_placePicker = [[GMSPlacePickerViewController alloc] initWithConfig:config];
|
||||
_placePicker.delegate = self;
|
||||
UIViewController *root = RCTPresentedViewController();
|
||||
[root presentViewController:_placePicker animated:true completion:nil];
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user