UITextView在iphone中隐藏键盘

我想在用户按下UITextView对象在iphone中返回时隐藏键盘。 但是,神秘的是,这不适用于UITextView但为UITextField工作。 我无法弄清楚为什么…

这就是我所做的:

1)我在XCode4中创build了一个基于视图的应用程序。

2)在.xib中创build了UITextViewUITextFieldUIButton对象

3)将UITextFieldUITextView代表标记为Outlets中的文件所有者

4)在.h中的@interface UIViewController中添加了<UITextFieldDelegate>

5)在.m中添加了textFieldShouldReturn函数

这里是代码:

.h文件

 @interface keyboardDisappearViewController : UIViewController <UITextFieldDelegate> { UITextView *textBoxLarge; UITextField *textBoxLittle; } @property (nonatomic, retain) IBOutlet UITextView *textBoxLarge; @property (nonatomic, retain) IBOutlet UITextField *textBoxLittle; - (IBAction)doSomething:(id)sender; @end 

.m文件

 - (BOOL) textFieldShouldReturn:(UITextField *)theTextField { NSLog(@"textFieldShouldReturn Fired :)"); [textBoxLarge resignFirstResponder]; [textBoxLittle resignFirstResponder]; return YES; } 

令人惊讶的是,键盘在textBoxLittle(UITextField)的情况下消失,但在textBoxLarge(UITextView)的情况下,

作为进一步的检查,我做了button来调用函数doSomething

 - (IBAction)doSomething:(id)sender { [textBoxLarge resignFirstResponder]; [textBoxLittle resignFirstResponder]; } 

当我按下button时,键盘在两个文本框中都消失了。

它驱使我为什么textFieldShouldReturn为小文本框工作,但不适用于大型文本框。

请帮忙!

您需要在UITextViewDelegate编写代码并将其分配给您的类。

三件事:

让你的视图实现UITextViewDelegate。

 @interface keyboardDisappearViewController : UIViewController <UITextFieldDelegate, UITextViewDelegate> 

添加以下方法:

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

在接口生成器中将文件的所有者设置为UITextView的委托。

(顺便说一下:解决scheme从评论复制到上一个答案,因为它花了我一段时间来提取,但是其他人可以从我的经验中受益)。

简单的把戏为你的文本视图设置delegate然后

 doSomething { } 

操作连接到control event didEndOnExit and tuchupinside分机视图


//当用户点击进入/退出时closures键盘

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

您已在.h文件中编码:

 @interface keyboardDisappearViewController : UIViewController <UITextFieldDelegate> { UITextView *textBoxLarge; UITextField *textBoxLittle; } @property (nonatomic, retain) IBOutlet UITextView *textBoxLarge; @property (nonatomic, retain) IBOutlet UITextField *textBoxLittle; - (IBAction)doSomething:(id)sender; @end 

它应该是:

 @interface keyboardDisappearViewController : UIViewController <UITextFieldDelegate> { UITextView *textBoxLarge; UITextField *textBoxLittle; } @property (nonatomic, retain) IBOutlet UITextField *textBoxLarge; @property (nonatomic, retain) IBOutlet UITextField *textBoxLittle; - (IBAction)doSomething:(id)sender; @end 

使用这个代码

在您的Viewcontroller中inheritanceUITextViewDelegate协议添加文本

 @interface YourViewController () <UITextViewDelegate> 

在viewDidLoad中将自己设置为一个委托:

 yourUITextView.delegate = self; 

实现下面的委托方法:

 - (BOOL)textViewShouldBeginEditing:(UITextView *)textView { return NO; } 

关键点

  • 有人需要倾听返回键按下

    • UITextFieldDelegate
    • textFieldShouldReturn(textField:UITextField)
  • 有人需要手动closures键盘

    • resignFirstResponder()

#1:创build一个UITextFieldDelegate并将其作为委托给你的UITextField –

 exampleTextField.delegate = yourUITextFieldDelegate; 

#2: “yourUITextFieldDelegate”包含以下内容 –

 func textFieldShouldReturn(textField : UITextField) -> Bool { self.titleField.resignFirstResponder(); //Here's the key!!!!! return true; //true just says 'default behavior' } 

如果你来这里寻找Swift解决scheme,就像我一样,在这里你是:)

 extension keyboardDisappearViewController : UITextViewDelegate { func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { if(text == "\n") { textView.resignFirstResponder() } return true }}