@interface MyLocationViewController ()...">

Google Maps text fields do not respond

#import "MyLocationViewController.h" #import <GoogleMaps/GoogleMaps.h> @interface MyLocationViewController () @end @implementation MyLocationViewController { GMSMapView *mapView_; CLLocationManager *locationManager; } - (void)viewDidLoad { [super viewDidLoad]; locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyBest; [locationManager startUpdatingLocation]; NSLog(@"Current identifier: %@", [[NSBundle mainBundle] bundleIdentifier]); GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86 longitude:151.20 zoom:6]; mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera]; mapView_.myLocationEnabled = YES; self.view = mapView_; //Add text field UITextField *textField = [[UITextField alloc] init]; textField.frame = CGRectMake(mapView_.bounds.size.width - 290, mapView_.bounds.size.height - 48, 180, 40); textField.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin; textField.borderStyle = UITextBorderStyleRoundedRect; textField.font = [UIFont systemFontOfSize:15]; textField.placeholder = @"enToi UHMUH Bar Heya"; textField.autocorrectionType = UITextAutocorrectionTypeNo; textField.keyboardType = UIKeyboardTypeDefault; textField.returnKeyType = UIReturnKeyDone; textField.clearButtonMode = UITextFieldViewModeWhileEditing; textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; textField.clearButtonMode = UITextFieldViewModeWhileEditing; textField.delegate = self; [mapView_ addSubview:textField]; [mapView_ resignFirstResponder]; [mapView_ bringSubviewToFront:textField]; [textField becomeFirstResponder]; //Add Send Chat Button to UI UIButton *sendButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; sendButton.frame = CGRectMake(mapView_.bounds.size.width - 100, mapView_.bounds.size.height - 48, 90, 40); sendButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin; [sendButton setTitle:@"Send" forState:UIControlStateNormal]; [mapView_ addSubview:sendButton]; // Creates a marker in the center of the map. GMSMarker *marker = [[GMSMarker alloc] init]; marker.position = CLLocationCoordinate2DMake(-33.86, 151.20); marker.title = @"Sydney"; marker.map = mapView_; } - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ return YES; } - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; } #pragma mark - CLLocationManagerDelegate - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"didFailWithError: %@", error); UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to get your location!" delegate:nil cancelButtonTitle:@"OKAY" otherButtonTitles:nil]; [errorAlert show]; } - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { CLLocation *currentLocation = [locations lastObject]; NSLog(@"didUpdateLocations: %@", currentLocation); if (currentLocation != nil) { GMSCameraPosition *newSpot = [GMSCameraPosition cameraWithLatitude:currentLocation.coordinate.latitude longitude:currentLocation.coordinate.longitude zoom:6]; [mapView_ setCamera:newSpot]; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end 

Here is my header file:

 #import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> @interface MyLocationViewController : UIViewController <CLLocationManagerDelegate, UITextFieldDelegate> @property (nonatomic, retain) UITextField *textField; @end 

I do not use Interface Builder. When the application loads, I see my text box and button. When a button is pressed, the button switches by default. The text field cannot be edited - it cannot call the keyboard by clicking on it, type, etc.

I launched some method to determine if a frame is outside the scope of its parent view, and he came back saying that it was beyond the scope - but I'm not quite sure how to solve it.

+3
source share
4 answers

GoogleMapView has a BlockingGestureRecognizer that blocks all user input. do not add a text box to the card OR remove the blocker:

 // Remove the GMSBlockingGestureRecognizer of the GMSMapView. + (void)removeGMSBlockingGestureRecognizerFromMapView:(GMSMapView *)mapView { if([mapView.settings respondsToSelector:@selector(consumesGesturesInView)]) { mapView.settings.consumesGesturesInView = NO; } else { for (id gestureRecognizer in mapView.gestureRecognizers) { if (![gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) { [mapView removeGestureRecognizer:gestureRecognizer]; } } } } 
+6
source

Add this if you need to enable touch event in uitextfield

 for (id gestureRecognizer in mapView_.gestureRecognizers) { NSLog(@"mapview recognizer %@",gestureRecognizer); if (![gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) { [mapView_ removeGestureRecognizer:gestureRecognizer]; } } 
+3
source

Add your UITextfield or UISearchbar to the Mapview _ subtitle

 UISearchBar *search; search = [[UISearchBar alloc] init]; [search setTintColor:[UIColor colorWithRed:233.0/255.0 green:233.0/255.0 blue:233.0/255.0 alpha:1.0]]; search.frame = CGRectMake(50,20,self.view.frame.size.width-70,32); search.delegate = self; search.placeholder = @"MapView"; [mapView_ addSubview:search]; 

Add the following method to your .m file

 // Remove the GMSBlockingGestureRecognizer of the GMSMapView. + (void)removeGMSBlockingGestureRecognizerFromMapView:(GMSMapView *)mapView { for (id gestureRecognizer in mapView.gestureRecognizers) { NSLog(@"mapview recognizer %@",gestureRecognizer); if (![gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) { [mapView removeGestureRecognizer:gestureRecognizer]; } } } 

Calling this method from your view will

 - (void)viewWillAppear:(BOOL)animated { [ViewController removeGMSBlockingGestureRecognizerFromMapView:mapView_]; } 

Now this will work, I only tested this code.

0
source

Try

 [self.view addSubview: textField]; 

Instead

 [mapView_ addSubview:textField]; 

This can help you.

-1
source

Source: https://habr.com/ru/post/1489168/


All Articles