如何用返回键关闭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出口

相关文章
相关标签/搜索