UITextView在iphone中隐藏键盘
我想在用户按下UITextView
对象在iphone中返回时隐藏键盘。 但是,神秘的是,这不适用于UITextView
但为UITextField
工作。 我无法弄清楚为什么…
这就是我所做的:
1)我在XCode4中创build了一个基于视图的应用程序。
2)在.xib中创build了UITextView
, UITextField
和UIButton
对象
3)将UITextField
和UITextView
代表标记为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 }}