【问题标题】:How to make the keyboard disappear after clicking return button [duplicate]单击返回按钮后如何使键盘消失[重复]
【发布时间】:2012-04-02 08:52:44
【问题描述】:

可能重复:
How to make return key on iphone make keyboard disappear?

我正在处理的页面中有两个文本字段。单击返回后只有第一个文本字段消失,但第二个文本字段不起作用。

这是我的 .m 文件中的方法:

-(void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated]; 
    self.cardNameTextField.delegate = self;    
    self.pinTextField.delegate = self;
}

-(BOOL) textFieldShouldReturn:(UITextField *)textField
{    
    if (_cardNameTextField !=nil)
    {
        [self.cardNameTextField resignFirstResponder];
    }
    else if (_pinTextField !=nil)
    {      
        [self.pinTextField resignFirstResponder];
    } 
    return YES;
}

请指教:)

【问题讨论】:

  • 谢谢!看看这个。
  • 我已经记不清在 SO 上看到这个问题多少次了。不管是什么,count++;!
  • @SimonWithington 谢谢!它现在正在工作:)
  • @tipycalFlow 我不知道该在哪里放置 ++,但无论如何谢谢 :)
  • @Hans hehe...那是个笑话伙伴!不用担心...

标签: iphone objective-c ios5 xcode4


【解决方案1】:

用这个替换上面的代码,如果有帮助,试试:

-(BOOL) textFieldShouldReturn:(UITextField *)textField{

    if ([_cardNameTextField isEditing]) {

    [self.pinTextField resignFirstResponder];
    }

     if ([_pinTextField isEditing]) {

    [self.cardNameTextField resignFirstResponder];

    }

    return YES;
    }

【讨论】:

    【解决方案2】:

    您的代码的问题在于您正在检查您的UITextFields 是否为nil,它们不等于nil。因此,每当检查条件时,它总是进入第一个案例并返回(另一个在 else 中)。以下场景也适用:

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

    -(BOOL) textFieldShouldReturn:(UITextField *)textField{
     if (_cardNameTextField == textField)
     {
        [self.cardNameTextField resignFirstResponder];
     }
     else if (_pinTextField == textField)
     {      
        [self.pinTextField resignFirstResponder];
     } 
    return YES;
    }
    

    只需在第二种情况下删除else 关键字即可。

    Do it @Neelam Verma's way.

    我会推荐第一个场景,它强制第一响应者在不检查任何条件的情况下辞职......

    【讨论】:

      【解决方案3】:

      确保您已设置文本字段的委托。

      【讨论】:

        【解决方案4】:

        使用委托UITextFieldDelegate

        在你的实现类中,你有两个步骤:

        1. 设置委托

          self.textField.delegate = self;

        2. 实现这个方法

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

        【讨论】:

        • 谢谢! :) 我已经做到了,它奏效了。
        【解决方案5】:

        当用户点击文本键盘上的 Done 按钮时,Did End On Exit 会产生事件,此时我们需要告诉文本域放弃控制 这样键盘就会消失。为此,我们需要添加一个操作方法 到我们的控制器类。 这个怎么样:

        在你的 . h:

        - (IBAction)textFieldDoneEditing:(id)sender;
        

        在你的 .m 中:

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

        【讨论】:

          【解决方案6】:

          这可能对你有帮助!

          - (void) textFieldDidEndEditing:(UITextField *) textField
          {
              [textField2 resignFirstResponder];
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-07-22
            • 2021-08-27
            • 1970-01-01
            • 2011-04-13
            • 1970-01-01
            • 1970-01-01
            • 2012-11-15
            • 2021-09-12
            相关资源
            最近更新 更多