5

这是我的场景:

UIViewController我的StoryBoard 中有一个用于映射功能的内容。我正在添加一个谷歌地图视图(谷歌地图 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 视图,以编程方式添加文本字段),无论如何,文本字段都不会获得用户交互。

我启用了用户交互,确保文本字段顶部没有视图,全部为空。我觉得我错过了一些简单的东西。为什么我不能与我的文本字段交互?

另外:如果它是相关的,上面的代码在它自己的 sub 中,从viewDidLoadsuper 调用之前被调用。

4

4 回答 4

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;
}
于 2013-07-01T21:08:50.703 回答
1

我有同样的问题!你找到解决办法了吗?UITextField 的框架似乎一切正常。出于调试目的,我在 UITextField 上方放置了一个按钮,并且该按钮能够被触摸。也许这笔交易是在谷歌地图视图处理触摸或 ui 绘图的方式上?

于 2013-11-28T14:28:34.590 回答
0

我遇到了同样的问题,并在这里找到了解决方案https://stackoverflow.com/questions/20015266

似乎 GMSMapView 有一个 BlockingGestureRecognizer 可以防止与文本字段的交互。如果禁用此功能,请记住父视图将从手势接收事件

于 2015-02-06T15:43:46.617 回答
0

确保将文本字段插入到内容视图中。

于 2014-05-07T19:17:47.870 回答