我想在用户按回车键时隐藏键盘 UITextView
iphone 中的对象。然而,神秘的是这不适用于 UITextView
但为 UITextField
工作.我无法弄清楚为什么...
这是我做的:
1) 我在 XCode4 中创建了一个基于 View 的应用程序。
2) 在 .xib 中创建 UITextView
, UITextField
和 UIButton
对象
3) 标记为 UITextField
和 UITextView
在 Outlets 中委托(delegate)文件所有者
4) 添加了 <UITextFieldDelegate>
.h 中的@interface UIViewController
5) 添加了 textFieldShouldReturn
.m 中的函数
代码如下:
.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) 的情况下却没有
作为进一步检查,我制作了调用函数 doSomething 的按钮
- (IBAction)doSomething:(id)sender {
[textBoxLarge resignFirstResponder];
[textBoxLittle resignFirstResponder];
}
当我按下按钮时,键盘在两个文本框中都消失了。
让我抓狂的是为什么 textFieldShouldReturn 适用于小文本框,而不适用于大文本框。
请帮忙!
最佳答案
三件事:
让您的 View 实现 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 的委托(delegate)。
(顺便说一句:解决方案是从评论中复制到之前的答案,因为我花了一些时间才提取出来。我认为其他人可以从我的经验中受益。)
关于iphone - UITextView 在 iPhone 中隐藏键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6680693/