在IB的库中,引言告诉咱们,当按下返回键时, UITextView
的键盘将消失。 可是实际上, 返回键只能充当'\\ n'。 网络
我能够添加一个按钮,而后使用[txtView resignFirstResponder]
隐藏键盘。 框架
可是有没有一种方法能够在键盘中为返回键添加动做,这样我就不须要添加UIButton
? ide
-(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
在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
一种更优雅的方法是,当用户点击键盘框架以外的某个位置时,将其关闭。
首先,在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]; }
当用户在键盘上轻击而未轻按输入空格时,键盘将关闭。
我知道这不是这个问题的确切答案,可是在互联网上寻找答案后,我发现了这个话题。 我认为其余人也有这种感受。
这是我发现的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"); }
我但愿这有帮助。 看起来如此明显,但我从未在网络上的任何地方看到此解决方案-我作错了什么吗?
个人hack:
1-建立一个覆盖整个视图的按钮; 2-将其发送到视图的背景,3-在属性检查器中将其类型从“圆角矩形”更改成“自定义”,4-建立操做5,实施操做方法:
- (IBAction)bgTouched:(id)sender { //to dismiss keyboard on bg btn pressed [_userInput resignFirstResponder]; }
_userInput是您的TextField出口