iOS谷歌地图textField没有响应 [英] iOS Google Maps textField not Responding

查看:91
本文介绍了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

这是我的头文件:

Here's my header file:

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@interface MyLocationViewController : UIViewController <CLLocationManagerDelegate, UITextFieldDelegate>

@property (nonatomic, retain) UITextField *textField;

@end

我没有使用Interface Builder。当应用程序加载时,我可以看到我的文本框和按钮。触摸时,按钮会执行默认的切换行为。文本字段不可编辑 - 不能通过点击键盘来输入键盘,不能输入等。

I am not using Interface Builder. When the app loads I can see my textfield and button. The button does its default toggle behavior when touched. The text field is not editable - can't bring up the keyboard by clicking it, cant type into, etc.

我确实运行了某人的方法来确定一个帧是出于其父视图的界限,它回来说它是超出界限 - 但我不太清楚如何解决这个问题。

I did run someone's method to determine if a frame is out of its parent view's bounds and it came back as saying it was out of bounds - but I'm not quite sure how to resolve this.

推荐答案

googleMapView有一个阻止所有用户输入的BlockingGestureRecognizer。不要将文本字段添加到地图中,或者移除阻止程序:

The googleMapView has a BlockingGestureRecognizer that blocks all user input. don't add the textfield to the map 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];
            }
        }
    }
}

这篇关于iOS谷歌地图textField没有响应的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆