【问题标题】:Assign a method for didEndOnExit event of UITextField为 UITextField 的 didEndOnExit 事件分配方法
【发布时间】:2010-10-26 01:58:33
【问题描述】:

如何以编程方式将方法(观察者?)分配给UITextField 对象的didEndOnExit 事件?

这在 IB 中很容易做到,但我不知道如何在代码中做到这一点。

【问题讨论】:

    标签: iphone cocoa-touch uitextfield


    【解决方案1】:

    对于任何考虑使用此目标来使另一个文本字段成为FirstResponder 以创建一个“下一步”按钮选项的人,感觉就像您正在通过文本字段“跳动”一样,我建议使用 textFieldShouldReturn 代替这样的代码。让我告诉你它的效果非常好,你会觉得你在骑独角兽:

        -(BOOL)textFieldShouldReturn:(UITextField *)textField{
        [textField resignFirstResponder];
    
        if([textField isEqual:_textField1]){
            [_textField2 becomeFirstResponder];
            return NO;
        }else if([textField isEqual:_textField2]){
            [_textField3 becomeFirstResponder];
            return NO;
        }
    
        return YES;
    }
    

    【讨论】:

      【解决方案2】:

      在您的视图控制器中实现以下方法:

      - (void)textFieldDidEndEditing:(UITextField *)textField{
      
      //do stuff
      
      }
      

      不要忘记在 viewDidLoad 或初始化器中设置委托:

      myTextField.delegate = self;
      

      【讨论】:

      • 您必须确保已设置委托。此外,textField 必须退出第一响应者,这会使键盘消失,作为您正确完成的线索。
      • 您发布的内容可能是对的,我不知道。然而,我在上面发布的代码更优雅,并且完全符合我的要求。
      • 我想我的意思是 UITextField 是在考虑委托模式的情况下创建的(就像大多数 Apple 控件一样)。您的实施同样有效。但是,如果您需要在 UITextField 生命周期的不同点添加自定义代码,则只需在自定义视图控制器实例中实现所需的委托方法就很有意义。您可以在 UITextFieldDelegate 协议参考中找到所有支持的方法。
      • 这是一个旧的,但这里的区别是“退出”部分。 textFieldDidEndEditing: 在字段完成编辑时被调用,无论是点击键盘上的 Return 键还是点击视图中的其他内容。 didEndOnExit 事件仅在使用键盘上的 Return 键时发生。看起来UITextFieldDelegate 缺少此事件的方法。
      【解决方案3】:

      我刚刚想通了……

      [mytextField addTarget:self 
              action:@selector(methodToFire:)
              forControlEvents:UIControlEventEditingDidEndOnExit];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-05
        • 2014-10-19
        • 1970-01-01
        • 1970-01-01
        • 2012-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多