iOS谷歌地图textField没有响应

#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 

这是我的头文件:

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

我没有使用Interface Builder。 当应用程序加载时,我可以看到我的文本框和button。 触摸时,该button会执行默认的切换行为。 文本字段不可编辑 – 不能通过单击来打开键盘,无法input等。

我确实运行了某人的方法,以确定一个框架是否超出了其父视图的界限,并且它回来说它是超出界限 – 但我不知道如何解决这个问题。

googleMapView有一个阻止所有用户input的BlockingGestureRecognizer。 不要将文本字段添加到地图或删除阻止程序:

 // 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]; } } } } 

如果您需要在uitextfield中启用触摸事件,请添加此项

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

将您的UITextfield或UISearchbar添加到Mapview_的子视图中

 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]; 

将下面的方法添加到.m文件中

 // 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]; } } } 

从您的视图调用此方法将出现

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

现在它会工作,我只用这个代码testing。

尝试

 [self.view addSubview: textField]; 

代替

 [mapView_ addSubview:textField]; 

这可能会帮助你。