3

画面上の他の場所に触れた後、キーボードを非表示にしようとしています。私が使用しているコードは、ここでのこの回答に基づいています。

IBOutlet UITextView *myTextView;

そして方法:

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

    UITouch *touch = [[event allTouches] anyObject];
    if ([myTextView isFirstResponder] && [touch view] != myTextView) {
        [myTextView resignFirstResponder];
    }
    [super touchesBegan:touches withEvent:event];
}

私が理解していないのは、UITextFieldをtouchesBeganメソッドにリンクする方法です。どの送信済みイベントを使用する必要がありますか?また、現在UITextFieldをメソッドに接続できないため、メソッドをIBActionにするべきではありません。

私もこのコードを試してみましたが、そのコードは私のナビゲーションボタンを壊していました(コメントに記載されている解決策でも)

4

6 に答える 6

26

目標 C:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     [[self view] endEditing:YES];
}

迅速:

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    self.view.endEditing(true)
}

これは私が見つけた最良の方法であり、非常に簡単です。

于 2012-09-01T14:21:36.367 に答える
6

UITextFieldをtouchesBeganメソッドにリンクする方法。どの送信済みイベントを使用する必要がありますか?また、現在UITextFieldをメソッドに接続できないため、メソッドをIBActionにするべきではありません。

あなたがしないので。テキストフィールドがサブビューであるビューでこのメソッドをオーバーライドする必要があります。

于 2012-09-01T12:50:32.200 に答える
4

私がしていることは、UIView クラス全体を UIControl に変更することです。 ここに画像の説明を入力

これにより、resignFirstResponder メソッドにリンクできる touchDown イベントが得られます。 ここに画像の説明を入力
UIControl は引き続き UIView のすべての機能を提供します。

-(IBAction)backgroundTap:(id)sender
{
    [text1 resignFirstResponder];
    [text2 resignFirstResponder];
    [textLogin resignFirstResponder];
    [textPassword resignFirstResponder];
} // Resign all responders
于 2012-09-01T12:57:05.117 に答える
0
- (void)viewDidLoad
{
     //for keybord hide when touch outside:


    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                   initWithTarget:self
                                   action:@selector(hidekeybord)];
    [self.view addGestureRecognizer:tap];



    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}


-(void)hidekeybord
{

    [_yourtextfield.txt resignFirstResponder];

}
于 2014-03-24T07:32:13.290 に答える
0
In .h
@property (nonatomic, assign) id currentResponder;

In .h
//in viewDidLoad:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignOnTap:)];
    [singleTap setNumberOfTapsRequired:1];
    [singleTap setNumberOfTouchesRequired:1];
    [self.view addGestureRecognizer:singleTap];

//Implement the below delegate method:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    self.currentResponder = textField;
}

//Implement resignOnTap:

- (void)resignOnTap:(id)iSender {
    [self.currentResponder resignFirstResponder];
}
于 2014-08-25T13:49:17.633 に答える
-2

迅速で汚い方法を試してください:

ボタンを取り、それをアクションメソッドにリンクします(バックグラウンドと呼びます)。ビュー全体を覆うようにボタンを伸ばします。ビューのレイヤーを調整して、ユーザーがタッチで操作するものだけがボタンの上に表示されるようにします。ボタンのタイプをカスタムに変更します。これにより、ボタンが非表示になります。メソッドBackgroundのfirstResponderを閉じます。

于 2012-09-01T12:52:17.803 に答える