在iPhone应用中,如何设置一个完成按钮来关闭键盘(包括UITextView)?

14

我正在开发一个iPhone应用,在这个应用中,用户正在UITextView中输入。

我想知道如何在键盘上添加“完成”按钮,而不是普通的回车键。当用户点击该按钮时,键盘会关闭。

谢谢!

3个回答

33

UITextViewDelegate协议中没有-textViewShouldReturn:方法。如果您希望按下返回(完成)键时关闭键盘,则最好使用UITextField,因为UITextView旨在编辑多行文本(因此您需要一种输入换行符的方式)。

如果您真的想在UITextView中按下返回键时关闭键盘,那么可以尝试像这样做:

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

谢谢!我需要使用TextView的原因是因为我正在开发的应用程序是Twitter API。如果用户想在发布推文之前阅读它,那么这对用户来说可能会有点混乱。 - Tapy

-4

这很简单:

textField.returnKeyType=UIReturnKeyDone;

将以下代码添加到您的文本字段代理中,以在按下键盘时移除它:
```swift func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() return true } ```
- (BOOL)textFieldShouldReturn:(UITextField *)aTextfield {
    [aTextfield resignFirstResponder];
    return YES;
}

是的,但那并没有关闭键盘。 - Tapy
对不起。我已将其添加到我的答案中。 - grahamparks
10
我认为这个问题是指的UITextView而不是UITextField。 - Mark Norgren
3
这并没有回答问题。问题是关于UITextView,它没有textFieldShouldReturn代理方法。 - Rick Hochstetler
问询者期望关于UITextView的答案。 - codercat
谢谢,这真的帮了我很多,因为我的textFieldShouldEndEditing和textFieldDidEndEditing代理函数没有被调用。 - PeterPurple

-6

除了设置之外:

textField.returnKeyType = UIReturnKeyDone;

你需要将文本字段的委托设置为你的类,并执行以下操作:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];

    return YES;
}

这个设置returnKeyType也可以通过Interface Builder来完成 - 如果你的UI是在XIB文件中定义的话。另外,-resignFirstResponder将确保键盘消失。应该在-textFieldShouldReturn:代理方法中进行,因为当用户点击Done按钮时会调用该方法。

希望对你有所帮助。


1
他要求使用UITextView而不是UITextField。 - Domness
1
也不回答问题...问题是关于UITextView的。 - Rick Hochstetler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接