2012-04-11 9 views
-1

私のプロジェクトでは、私のアプリケーションのルートビューとしてビューを設定しました。テキストフィールドにフォーカスできない

このルートビューのコントローラで、Iは、hierachy持っている:

rootview - [addsubview] - foregroundView - [addsubview] - I「のテキストフィールド

をxibの代わりにコードでそれをしました。

この場合、テキストフィールドにフォーカスすることはできません。画面上のテキストフィールドをクリックしても何も起こっていないようです。私はそのように変更した場合でも:

rootview - [addsubview] - foregroundView

rootview - [addsubview] - テキストフィールド

すべてがうまく働きました。

私はグループとしてforegroundViewとtextfieldを作りたいので、以前のスタイルを使用することをお勧めします。これを考えている人はいますか?どうもありがとう。

//it's a viewController.m , it's view has been set as the root view for the app. 
self.foregroundView = [[UIImageView alloc] initWithFrame:CGRectMake(15, 140, 290, 250)]; 
UIImage *foregroundImage = [XYZImageProcessor resizeImage:[UIImage imageNamed:@"Texture0203.jpg"] toSize:CGSizeMake(275, 250)]; 
[self.view addSubview:self.foregroundView ]; 
self.nickNameTextField = [self.class customTextFieldMake:CGRectMake(80, 200, 150, 30)]; 
[self.view addSubview:self.nickNameTextField]; 
//if I change it to [self.foregroundView addSubview:self.nickNameTextField],the textfield can not be focused. 
+0

「集中しない」とはどういう意味ですか?キーボードはまったく表示されますか? – CodaFi

+0

ビュー階層を作成するコードを投稿できますか? – danh

+0

「フォーカスしない」とは、画面上のテキストフィールドをタッチするとキーボードが表示されないことを意味します。いくつかのソースコードを追加します。申し訳ありません。 – biaobiaoqi

答えて

2

foregroundViewuserInteractionEnabledにNOを設定しているかのように聞こえます。これは単にforegroundViewがタッチイベントを受け取っていないことを意味するものではなく、そのサブビューのどれもがどちらも行いません。 How to get touches when parent view has userInteractionEnabled set to NO in iOSを参照してください。 (短い答え:することはできません)

したがって、ビューを構築するとき[foregroundView setUserInteractionEnabled:YES]を設定してみてください。

foregroundViewが独自のhitTest:withEvent:を実装している場合、サブビューとのやりとりも防止できます。

+0

ありがとうございました。うまくいく! – biaobiaoqi

0

viewWillAppearでこれをやってみてください:ここで

は私のトラブルのためのコアソースコードです

[desiredField becomeFirstResponder]; 

をフィールドにファーストレスポンダを作ることで、フォーカスとキーボードを持っていますが表示されます。

+0

-becomeFirstResponderを呼び出すことはお勧めできません。このメソッドのドキュメントでは、「このメソッドではなくNSWindow makeFirstResponder:メソッドを使用して、オブジェクトを最初のレスポンダにする。このメソッドを直接呼び出さないでください。 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSResponder_Class/Reference/Reference.html#//apple_ref/occ/cl/NSResponder – Vervious

+0

ありがとうございました。 becomeFirstResponderはキーボードを取得しますが、私のコントロールなしに、最初に表示されます。私はまだキーボードから抜け出した後、それに集中することはできません。 makeFirstResponderはNSWindow内で呼び出されるべきです。 – biaobiaoqi

関連する問題