2011-07-22 6 views
0

自分のテキストフィールドの代理人をselfに設定しましたが、その代理人を.hに追加しましたが、問題があります。私はキーボードを非表示にしたいをクリックすると、ビュー内のテキストフィールド以外にが表示されます。これは可能ですか?もしそうなら、どうすればいいのですか?キーボードの問題を解消する目的 - 目的C

答えて

0

いくつかは、次のように...「ハッキング」:

- (void)textFieldDidBeginEditing:(UITextField *)textField{ 

    //glass is a class's property 
    if(glass){ 
     self.glass=nil; 
    } 
    glass=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; //put the size you want. 
    [glass addTarget:self action:@selector(hideGlass) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view insertSubview:glass belowSubview:textField]; 
} 

-(void)hideGlass{ 
    //remove your glass. 
    [glass removeFromSuperview]; 
    //your textField resigns first responder. 
    if([myTextField canResignFirstResponder]){ 
     [myTextField resignFirstResponder]; 
    } 
} 

だから、基本的に、あなたは何をすべきか、右のあなたのTextFieldを怒鳴るダミーのボタンを追加することです。ですから、あなたのtextFieldを除いて他のものに触れると、彼はあなたのtextField resignFirstResponderを作成し、自分自身をビューから削除します。

編集1(tweek)あなたはこの交換する必要があります:私は、キーボードを非表示にする簡単な方法を発見し、あなたがクリックしたときにそれが動作

if(glass){ 
    [glass release]; 
    glass=nil; 
} 
+0

コードをお寄せいただきありがとうございますが、グラスとは何ですか?クラスのプロパティではどういう意味ですか? –

+0

GlassはUIButtonです。 .hファイルに以下を追加してください:UIButton * glass; @プロパティ(非原子、保持)UIButton * glass;ガラスを@合成するためにあなたの.mを忘れないでください。 – Peres

+0

いいですね。私はUITouchがオブジェクトを持っていることを知っています。そのプロパティを使ってコードを簡単にすることができますか? –

0

あなたは、次のデリゲートメソッドを実装する必要があります。

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
} 

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
} 
+0

私はこれらのメソッドを実装しましたが、それでもキーボードは隠されません。私はやっている: theTextField.delegate =自己; VDLと.h UITextFieldDelegate で、IBでテキストフィールドをクリックし、デリゲート接続をドラッグしてファイル所有者に接続します。 –

0

あなたがUITextFieldのためにIBOutletを持っている場合は、あなたが[textField resignFirstResponder];を使用してキーボードを閉じることができます。つまり、ビュー上の他のすべてに対してイベントリスナーを実装する必要があります。

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [textField resignFirstResponder]; 
} 

あなたが任意のボタンまたはサブビューを持っている場合は、あなたがする必要があります:あなたは、ユーザーがビューの背景をタップしたときにキーボードが非表示にしたい場合は、ビューコントローラの実装でタッチイベントを介して行うことができます個々のタッチイベントやアクションを実装することもできます。あなたが行うことができます

1

:このため

if(glass){ 
    self.glass=nil; 
} 

を画面の方法。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    // endEditing: This method looks at the current view and its subview hierarchy for the text field that is currently the first responder. 
    // If it finds one, it asks that text field to resign as first responder 
    [[self view] endEditing:TRUE]; 
}