这是我的情景:
我的StoryBoard中有一个UIViewController
用于我的映射功能。我正在添加Google地图视图(GoogleMaps iOS 1.3.1),如:
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
longitude:151.20 zoom:6];
mapView_ = [GMSMapView mapWithFrame:CGRectMake(0, 49, 320, 450) camera:camera];
mapView_.myLocationEnabled = YES;
self.view = mapView_;
我创建了一个自定义视图:MapTopBar.xib。简单地说,它是UIView
,UIImageView
(背景)和UITextField
&按钮。它有一个支持类文件,并且已经设置了所有UITextFields属性(委托,出口等)。
我将自定义视图添加到我的Map VC中,如:
UIView *topBar = [[MapTopBar alloc] initWithFrame:CGRectMake(0, 0, 320, 49)];
[self.view addSubview:topBar];
我的自定义视图已添加到主视图中,但UITextField
未收到任何触摸事件。键盘没有显示,字段中没有光标,没有。好像有什么东西掩盖了它,不允许任何用户交互。可以按下它旁边的按钮并正常工作。
我尝试过这么多种方式(以编程方式创建整个topBar视图,以编程方式添加文本字段),无论如何,文本字段都不会得到用户交互。
我启用了用户互动,确保文本字段顶部没有视图,全部为null。我觉得我错过了一些简单的事情。为什么我不能与我的文本域互动?
另外:如果它是相关的,上面的代码是在超级调用之前从viewDidLoad
调用它自己的子代码。
答案 0 :(得分:1)
UITextField似乎超出了其父视图的范围,并且没有被剪裁。 (或者父视图超出其父视图的范围......等等)
在viewDidAppear中,使用调试器或NSLog以UITextField结尾的视图层次结构。检查以确保每个视图的帧完全位于其父视图中。
这样的事情可以识别任何帧外视图:
UIView* v = _myTextField;
while ( v.superview != nil )
{
NSLog( @"%@ - %@", NSStringFromClass([v class]), CGRectContainsRect( v.superview.bounds, v.frame ) ? @"GOOD!" : @"BAD!" );
v = v.superview;
}
答案 1 :(得分:0)
我有同样的问题!你找到了解决方法吗?似乎UITextField的框架一切正常。出于调试目的,我在UITextField上面放了一个按钮,这个按钮能够触及。也许这笔交易与Google地图视图处理触摸或ui绘图的方式有关?
答案 2 :(得分:0)
确保将文本字段插入内容视图。
答案 3 :(得分:0)
我遇到了同样的问题,并在https://stackoverflow.com/questions/20015266
找到了解决方案似乎GMSMapView有一个BlockingGestureRecognizer,可以阻止与文本字段的交互。如果禁用此功能,请记住父视图将从手势接收事件