簡體   English   中英

在文本字段外面隱藏鍵盤

[英]Hide keyboard on touch outside of textfield

我試圖在屏幕上的任何其他地方觸摸后隱藏鍵盤。 我正在使用的代碼基於這里的答案

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方法。 我需要使用哪個發送的事件? 此外,該方法不應該是IBAction,因為現在我無法將我的UITextField連接到它。

我也嘗試了這個代碼,但那個代碼打破了我的導航按鈕(即使是評論中提到的解決方案)

目標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)
}

這是我找到的最好的方式,而且非常簡單。

我應該如何將我的UITextField鏈接到touchesBegan方法。 我需要使用哪個發送的事件? 此外,該方法不應該是IBAction,因為現在我無法將我的UITextField連接到它。

因為你沒有。 您必須在文本字段為子視圖的視圖上覆蓋此方法。

我所做的是將整個UIView類更改為UIControl。 在此輸入圖像描述

這為您提供了一個touchDown事件,您可以鏈接到resignFirstResponder的方法。 在此輸入圖像描述
UIControl仍然為您提供UIView的所有功能。

-(IBAction)backgroundTap:(id)sender
{
    [text1 resignFirstResponder];
    [text2 resignFirstResponder];
    [textLogin resignFirstResponder];
    [textPassword resignFirstResponder];
} // Resign all responders
- (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];

}
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];
}

嘗試快速而骯臟的方式:

按一個按鈕並將其鏈接到一個動作方法(讓我們稱之為背景)。 拉伸按鈕使其覆蓋整個視圖。 調整視圖的圖層,以便只有用戶通過觸摸進行交互的內容才會位於按鈕的頂部。 將按鈕類型更改為自定義,這使按鈕不可見。 在方法Background中關閉firstResponder。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM