如何用返回鍵關閉UITextView的鍵盤?

在IB的庫中,引言告訴咱們,當按下返回鍵時, UITextView的鍵盤將消失。 可是實際上, 返回鍵只能充當'\\ n'。 網絡

我能夠添加一個按鈕,而後使用[txtView resignFirstResponder]隱藏鍵盤。 框架

可是有沒有一種方法能夠在鍵盤中爲返回鍵添加動做,這樣我就不須要添加UIButtonide


#1樓

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if([text isEqualToString:@"\n"])
        [textView resignFirstResponder];
    return YES;
}

yourtextView.delegate=self;

同時添加UITextViewDelegate ui

不要忘記確認協議 spa

若是您沒有添加if([text isEqualToString:@"\\n"]) ,則沒法進行編輯 code


#2樓

在viewDidLoad中添加觀察者 server

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(textViewKeyPressed:) name: UITextViewTextDidChangeNotification object: nil];

而後使用選擇器檢查「 \\ n」 事件

-(void) textViewKeyPressed: (NSNotification*) notification {

  if ([[[notification object] text] hasSuffix:@"\n"])
  {
    [[notification object] resignFirstResponder];
  }
}

它確實使用「 \\ n」,而不是專門檢查返回鍵,可是我認爲這是能夠的。 rem

更新 get

請參閱下面的ribto答案,該答案使用[NSCharacterSet newlineCharacterSet]代替\\n


#3樓

一種更優雅的方法是,當用戶點擊鍵盤框架以外的某個位置時,將其關閉。

首先,在UIBuilder的身份檢查器中將ViewController的視圖設置爲「 UIControl」類。 按住Control鍵將視圖拖到ViewController的頭文件中,並將其做爲操做與事件(如Touch Up Inside)連接起來,例如:

ViewController.h

-(IBAction)dismissKeyboardOnTap:(id)sender;

在主ViewController文件中,ViewController.m:

-(IBAction)dismissKeyboardOnTap:(id)sender
    {
         [[self view] endEditing:YES];
    }

您可能須要使用相似技術雙擊或長按。 您可能須要將ViewController設置爲UITextViewDelegate並將TextView鏈接到ViewController。 此方法適用於UITextView和UITextField。

資料來源:大書呆子牧場

編輯:我還要補充一點,若是您使用的是UIScrollView,則上述技術可能沒法經過Interface Builder輕鬆地工做。 在這種狀況下,您可使用UIGestureRecognizer並在其中調用[[self view] endEditing:YES]方法。 一個例子是:

-(void)ViewDidLoad{
    ....
    UITapGestureRecognizer *tapRec = [[UITapGestureRecognizer alloc] 
        initWithTarget:self action:@selector(tap:)];
    [self.view addGestureRecognizer: tapRec];
    ....
}

-(void)tap:(UITapGestureRecognizer *)tapRec{
    [[self view] endEditing: YES];
}

當用戶在鍵盤上輕擊而未輕按輸入空格時,鍵盤將關閉。


#4樓

我知道這不是這個問題的確切答案,可是在互聯網上尋找答案後,我發現了這個話題。 我認爲其餘人也有這種感受。

這是我發現的UITapGestureRecognizer的差別,我發現它可靠且易於使用-只需將TextView的委託設置爲ViewController。

當TextView變爲可編輯狀態時,我添加了UITapGestureRecognizer而不是ViewDidLoad:

-(void)textViewDidBeginEditing:(UITextView *)textView{
    _tapRec = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)];

    [self.view addGestureRecognizer: _tapRec];
    NSLog(@"TextView Did begin");
}

當我在TextView外部點擊時,視圖將結束編輯模式,而且UITapGestureRecognizer會自行刪除,所以我能夠繼續與視圖中的其餘控件進行交互。

-(void)tap:(UITapGestureRecognizer *)tapRec{
    [[self view] endEditing: YES];
    [self.view removeGestureRecognizer:tapRec];
    NSLog(@"Tap recognized, tapRec getting removed");
}

我但願這有幫助。 看起來如此明顯,但我從未在網絡上的任何地方看到此解決方案-我作錯了什麼嗎?


#5樓

個人hack:

1-建立一個覆蓋整個視圖的按鈕; 2-將其發送到視圖的背景,3-在屬性檢查器中將其類型從「圓角矩形」更改成「自定義」,4-建立操做5,實施操做方法:

- (IBAction)bgTouched:(id)sender 
{
    //to dismiss keyboard on bg btn pressed
    [_userInput resignFirstResponder];
}

_userInput是您的TextField出口

相關文章
相關標籤/搜索