5

これが私のシナリオです:

UIViewControllerマッピング機能用に StoryBoard にがあります。次のような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 を作成しました。簡単に言えばUIViewUIImageView(背景)とUITextField&ボタン付きです。バッキング クラス ファイルがあり、すべての UITextFields プロパティが設定されています (デリゲート、アウトレットなど)。

次のように、カスタム ビューを Map VC に追加しています。

UIView *topBar = [[MapTopBar alloc] initWithFrame:CGRectMake(0, 0, 320, 49)];
[self.view addSubview:topBar];

カスタム ビューがメイン ビューに追加されていますが、UITextFieldタッチ イベントを受信して​​いません。キーボードが表示されず、フィールドにカーソルがなく、何もありません。何かがそれを覆い隠し、ユーザーの操作を許可していないようです。その隣のボタンは押すことができ、正常に動作します。

私はこれをさまざまな方法で実行しようとしました (プログラムで topBar ビュー全体を作成し、プログラムでテキスト フィールドを追加する)、何があっても、テキスト フィールドはユーザーの操作を取得しません。

ユーザー インタラクションを有効にし、テキスト フィールドの上にビューがないことを確認しました。すべて null です。シンプルなものが欠けているような気がします。テキストフィールドを操作できないのはなぜですか?

また、関連する場合、上記のコードはviewDidLoad、スーパーコールの前に呼び出される独自のサブ内にあります。

4

4 に答える 4

1

私は同じ問題を抱えています!回避策は見つかりましたか?UITextField のフレームですべて問題ないようです。デバッグ目的で、UITextField の上にボタンを配置しました。このボタンはタッチできました。おそらく、GoogleマップビューがタッチまたはUI描画を処理する方法に問題があるのでしょうか?

于 2013-11-28T14:28:34.590 に答える
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 に答える
0

I had this same problem and found a solution here https://stackoverflow.com/questions/20015266

It seems GMSMapView has a BlockingGestureRecognizer which prevents the interaction with the text field. If you disable this keep in mind that the parent views will receive the events from the gestures

于 2015-02-06T15:43:46.617 に答える