2011-08-02 8 views

答えて

60
[myTextField resignFirstResponder] 

Here「キーボードの管理」セクションの第2段落。にUITextFiledから接続し、

-(IBAction)removeKeyboard 
{ 
[self.textfield resignFirstResponder]; 
} 

NIBファイルで:

-(IBAction)removeKeyboard; 

と実装に、このような何かを書く:

6

は、私はあなたが追加して、アクション、あなたのヘッダファイルに示唆しますファイルの所有者はオプションDidEndOnExitにあります。そうすれば、returnキーを押すと、キーボードは消えます。

希望すると助かります!

183

複数のテキストフィールドがあり、どちらが最初のレスポンダであるかわからない場合(またはこのコードを書いている場所のテキストフィールドにアクセスできない場合)、親ビューにはendEditing:が含まれていますテキストフィールド。 View Controllerの方法で

、それは次のようになります。

[self.view endEditing:YES]; 

パラメータは、ファーストレスポンダの状態を辞任するテキストフィールドを強制します。あなたが検証を実行するために、デリゲートを使用していた、すべてを停止したい場合は、テキストフィールドの内容が有効になるまで、あなたはまた、このようにそれをコーディングすることができます:

BOOL didEndEditing = [self.view endEditing:NO]; 
if (didEndEditing) { 
    // on to the next thing... 
} else { 
    // text field must have said to first responder status: "never wanna give you up, never wanna let you down" 
} 

endEditing:方法はresignFirstResponderに、個々のテキストフィールドを伝えるよりもはるかに優れていますしかし、何らかの理由で私は最近までそれについて知りませんでした。

+70

Damnitを!私はちょうどコードのコメントでは、rickrolledていると信じることはできません。 – Lytol

1

ちょうどyourTextFieldNameを置き換えて、あなたはそれを推測しました!あなたのテキストフィールド。これでキーボードが閉じます。

[yourTextFieldName resignFirstResponder]; 
1
-(void)methodName 
{ 
    [textFieldName resignFirstResponder]; 
} 

呼び出し、このメソッド(methodNameの)didEndOnExit

2

と、あなたはそれを見つけることができる最初の応答者であるテキストフィールドわからない場合。 、そして、

@interface YourViewController : <UITextFieldDelegate> 

@end 

:YourViewController.hファイル、あなたはUITextFieldDelegateプロトコルを実装することを確認してくださいあなたのビューコントローラで

UIView *resigned = resignFirstResponder([UIScreen mainScreen]); 
6

:あなたのコードの呼び出しで次に

UIView *resignFirstResponder(UIView *theView) 
{ 
    if([theView isFirstResponder]) 
    { 
     [theView resignFirstResponder]; 
     return theView; 
    } 
    for(UIView *subview in theView.subviews) 
    { 
     UIView *result = resignFirstResponder(subview); 
     if(result) return result; 
    } 
    return nil; 
} 

:私はこの機能を使用しますYourViewController.mファイルで、次のインスタンスメソッドを実装します。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self.yourTextField1 resignFirstResponder]; 
    [self.yourTextField2 resignFirstResponder]; 
    ... 
    [self.yourTextFieldn resignFirstResponder]; 
} 
8

テキストフィールドが最初の応答者ですが、キーボードが画面上にある場合があります。 このような場合、上記の方法ではキーボードを閉じることができません。

一つが取得する方法の例:

  1. プッシュABPersonViewControllerをプログラム的に画面上に。連絡先を開く。
  2. 「メモ」フィールド(最初の応答者になり、キーボードを起動します)に触れます。
  3. 「削除」ボタンが表示されるように他のフィールドにスワイプします。
  4. この時点では、テキストフィールドの中に最初のレスポンダーがありません(プログラムでチェックします)が、キーボードはまだそこにあります。 [view endEditing:YES]を呼び出すと何も行われません。あなたはまた、編集モードを終了するには、ビューコントローラを依頼する必要がある。この場合

[viewController setEditing:NO animated:YES]; 
4

私はendEditingresignFirstResponderが失敗するケースを発見しました。そのような場合には、これは私のために働いています。

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];  
[self setEditing:NO]; 
2

これは、「終了に終了しましたセットアップコード

// Swift 
self.view!.endEditing(true) 

// Objective C 
[self.view endEditing:YES]; 
0
-(void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    // your code 

    [textField reloadInputViews]; 
} 
-1
  1. 以下のいずれかのテキストフィールドの使用を辞任するには一つの特定のテキストフィールド

    // Swift 
    TextField.resignFirstResponder() 
    
    // Objective C 
    [TextField resignFirstResponder]; 
    

    を辞任します"Xcodeのイベント(テキストフィールドを右クリック)。

    Screenshot

  2. この方法の実現:

    -(IBAction) closeKeyboard:(id) sender { 
        [_txtField resignFirstResponder]; 
    } 
    
1

用のスウィフト3

あなたはこのようなキーボード非表示にすることができます:

textField.resignFirstResponder() 

あなたは時にユーザーを押して「イントロ」ボタン、キーボードを非表示にしたい場合は、以下のUITextFieldDelegateメソッドを実装する必要があります。

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 

    textField.resignFirstResponder() 

    return true 
} 
関連する問題