13

こんにちは、アプリケーションに 2 つの UITextFields があり、UITextFields 以外の場所をタッチしたときにキーボードを閉じたいのですが、どうすればよいですか?

4

10 に答える 10

24

この目的のために tochesBegin メソッドを使用します

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

  [yourFirstTextField resignFirstResponder];
  [yourSecondTextField resignFirstResponder];
}

他に何も必要ありません。ビューのどこかをタッチすると、両方の textField が辞任し、どちらがフォーカスを持っているかを知る必要がなくなります。

于 2011-02-09T04:46:42.197 に答える
11

イシュの答えは良いものです。しかし、次のことも試してみるべきだと思います。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

  [self.view endEditing:YES];
}
于 2011-02-09T05:14:23.120 に答える
1

バックグラウンドでカスタム ボタンを作成してから、それIBActionを呼び出すメソッドに接続する必要resignFirstResponderがあります。UITextField

このようなもの ここに画像の説明を入力

編集:

このコードを使用するよりもプログラムでボタンを追加したいので

- (void)viewDidLoad
{
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    button.buttonType = UIButtonTypeCustom;
    [button addTarget:self action:(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
    [button release];

この後にコントローラーコードを追加します。

于 2011-02-09T04:40:07.473 に答える
1

目に見えないボタンを作成し、ボタンの後ろに配置して、ボタンがタップされたときにテキスト フィールドにメッセージをUITextField送信します。resignFirstResponder

于 2011-02-09T04:40:08.860 に答える
1

デリゲートを使用し、

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

コントローラーでメソッドを作成することもできます

 -(IBAction)editingEnded:(id)sender{
    [sender resignFirstResponder]; 
}

次に、IB接続の接続インスペクターで、「終了時に終了しました」というイベントをそれに接続します。

于 2011-02-09T04:43:17.343 に答える
1

通常、このシナリオでは、残りのユーザー インターフェイスを保持するスクロール ビューが表示されます。そのスクロール ビューのデリゲートをビュー コントローラーに割り当て、 protocol を実装すると言う場合UIScrollViewDelegate、次のメソッドを追加するだけで機能します。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self.view endEditing:YES];
}
于 2015-10-26T15:04:53.550 に答える
0

Interface builder を使用していない場合は、ここで説明されているように手動でイベントをフックできます: How can I link an UIView or UIImageView with an event like "touch up inside"?

Interface builder を使用している場合は、背景ボタンを作成する必要はありません。

あなたはこれを行うことができます:

  1. ビューを選択します (おそらくビューと呼ばれます)
  2. プロパティ インスペクターの (i) タブに変更します。
  3. クラスを UIView から UIControl に変更します (これにより、 Touch Downイベントにアクセスできるようになります)。
  4. Touch Downイベントを backgroundTap メソッドにフックします (Ctrl + ドラッグ)。
  5. 変更を保存することを忘れないでください
于 2011-02-09T04:53:26.497 に答える
0

これを使って。

- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{

    const int movementDistance = 180; distace of keyboard up.

    const float movementDuration = 0.3f;

     int movement = (up ? -movementDistance : movementDistance);

    [UIView beginAnimations: @"anim" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];

    [UIView setAnimationDuration: movementDuration];

    self.view.frame = CGRectOffset(self.view.frame, 0, movement);

    [UIView commitAnimations];
}
于 2014-07-25T11:54:13.573 に答える
0
You need to define the action for your button click this way

[infoButton addTarget:self action:@selector(backButtonClicked) forControlEvents:UIControlEventTouchUpInside];


And implement the click method ,as for example i have provided the animation on button click method.
-(void)backButtonClicked
{

    [UIView beginAnimations:@"animation" context:nil];
    [UIView setAnimationDuration:1.5];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO]; 
    [self.navigationController popViewControllerAnimated:YES]; 
    [UIView commitAnimations];

}


Hope this will help you ,the action is without using IB.Its all done through coding
于 2011-02-09T05:09:34.237 に答える
-1

ビュー コントローラーで UITextField への参照を保持し、[yourTextField rejectFirstResponder] を呼び出します。

于 2011-02-09T04:39:01.870 に答える