0

所以我正在阅读关于 UITextView 的描述,它说当你按下键盘上的“返回”按钮时它会自动隐藏键盘。但它不起作用,所以我尝试创建一个

- (IBAction)textViewReturn:(id)sender; 
{
   [myTextView resignFirstResponder];
}

那也不起作用,所以我也尝试这样做:

- (BOOL)textViewShouldReturn:(UITextView *)textView
{
  [myTextView resignFirstResponder];
  return NO;
} 

不知道为什么整个交易一开始就不起作用。想知道是否有人可以提供帮助?

4

3 回答 3

2

我在UITextView 类参考中没有看到任何说明当您按下 Return 时它会自动隐藏键盘的内容。

此外,协议中没有textViewShouldReturn:消息。协议中有一条消息,但文本视图不是文本字段。UITextViewDelegatetextFieldShouldReturn:UITextFieldDelegate

如果你想让它在用户按下 Return 时隐藏键盘,你需要做两件事。

首先,您需要将一些对象(通常是您的视图控制器)连接到文本视图的delegate出口。您可以在您的 nib 中执行此操作,或者您可以在代码中执行此操作,也许在您的viewDidLoad方法中:

- (void)viewDidLoad {
    [super viewDidLoad];
    myTextView.delegate = self;
}

其次,您需要textView:shouldChangeTextInRange:replacementText:在委托对象中实现:

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

请注意,如果用户粘贴包含换行符和其他字符的文本,则不会捕获换行符。它只会在用户点击 Return 键或粘贴仅包含换行符的文本时注意到。

您可以将委托的类声明为符合UITextViewDelegate协议,在这种情况下,Xcode 将有助于自动完成方法名称。但即使该类不符合协议,它也会起作用。

于 2012-12-17T04:11:04.960 回答
1

根据您的评论,如果您想使用 aUITextField而不是 a UITextView,那么事情保持不变,除了为了在您按下回车时隐藏键盘,您需要在文本字段的委托中实现以下功能(确保您有首先设置):

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}
于 2012-12-17T05:45:13.530 回答
1

UITextView 的返回按钮用于将光标移动到新行。但是,如果您想在返回按钮上移除键盘,请尝试以下代码。当用户按下返回按钮时,它会退出键盘。因此,请尝试以下绝对解决您问题的代码。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if ([text isEqualToString:@"\n"]) {
        [textView resignFirstResponder];
        return NO;
    } else {
        return YES;
    }
}
于 2012-12-17T04:22:51.860 回答