34

这是文本字段委托方法,但我对返回类型有疑问

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

   return NO;
}  

这是具有不同返回类型的相同方法

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

   return YES;
 }

通过这两个我们可以在我的手机中隐藏键盘。但是返回类型“YES”或“NO”是什么意思。我没有看到任何区别。

4

4 回答 4

32

除了这里的其他答案(基本上确认没有重大区别,第一响应者没有通过返回YES等自动辞职),我发现了一个完全依赖于返回值的奇怪事件,特别是对于UITextField带有自动更正的.

假设以下场景:

  1. UITextField启用了自动更正功能

  2. 您已经实现了类似这样的委托方法(文本字段被辞职):

    - (BOOL)textFieldShouldReturn:(UITextField *)textField 
    {
        if (textField == self.myAutocorrectingTextField) {
            [self.myAutocorrectingTextField resignFirstResponder];
        }
        return YES; 
    }
    
  3. 您运行应用程序,在文本字段中键入“ Cable ”,然后按回车键,将其作为第一响应者。

返回时的结果YES

  • 文本字段的文本将从“电缆”更改为“电缆”!

我测试了一些其他类似的单词:

  • “东西”改为“东西”
  • “十”到“十”
  • 而且,有一次“Car”变成了“Carl”,又一次“Car”变成了“Carp”

返回时的结果NO

正常。文本字段的文本不会被更改。

总之...

返回YES时,文本字段可能会自动更正已经正确的单词。然而,它并没有呈现那些“自动更正文本气泡”之一,因为这些是合法的词。

返回NO时,文本字段不会自动更正已经正确的单词。

注意: 在这两种情况下,拼写错误的单词都会得到纠正。例如:

  • 如果您要输入“Wev”,则会出现一个“自动更正文本气泡”,其中包含文本“Web”。如果您按下 Return 键,则无论委托的返回值如何,文本都将替换为更正。
于 2013-12-06T23:50:21.577 回答
10

我根据个人经验看到的一个区别是,如果您返回 YES,则会触发自动更正和自动大写,如果您返回 NO,则不会触发。可能还有其他事情要做,但到目前为止我能注意到的就是这些。

这就是他们所说的“默认行为”。

于 2013-07-05T04:22:10.870 回答
0

我发现的最重要的区别是,如果文本字段发出控制事件UIControlEventEditingDidEndOnExit,这将导致文本字段退出第一响应者,除非 textFieldShouldReturn实现返回NO

于 2018-07-26T21:12:15.387 回答
-5

textFieldShouldReturn 是您可以处理键盘上的 Return 按钮的地方。

textFieldShouldReturn 询问代理文本字段是否应该处理按下返回按钮。

如果您实现自己的代码来处理返回按钮,您应该返回 NO,或者返回 YES 以便以默认方式处理它。

IOS 文档状态:每当用户点击返回按钮时,文本字段都会调用此方法。您可以使用此方法在点击按钮时实现任何自定义行为。

http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html

于 2012-07-19T10:21:28.787 回答