用户将焦点从文本字段更改为另一个时的调用方法(RubyMotion)

时间:2012-06-06 22:11:21

标签: ios textfield first-responder rubymotion

我正在使用RubyMotion(之前在Xcode中编写了Obj C,但现在我正在与想要使用RubyMotion的人合作,因为Ruby中的bkgd)

我有一个带有2个文本字段的ViewController。我需要它,以便每当用户从textfield1切换到textfield2时,如果不满足textfield1的条件,错误标签显示(我使用self.ErrorLabel.show)。我知道如何编写我的条件语句,但我真的不知道如何知道用户何时切换到下一个文本字段。

我以为我可以使用:

if ([textField1 isFirstResponder] && (textField1 != touch.view))
     log( 'left textfield1' )
end

if ([textField2 isFirstResponder] && (textField2 != touch.view))
     log( 'left textfield2' )

end

来自这个问题Detect UITextField Lost Focus,但没有这样的运气。我知道我正在使用RubyMotion,所以存在一些差异。

我如何让它工作?我不认为我正在搜索正确的关键字,因为它似乎是开发人员一直使用的东西,但我没有找到任何结果。

感谢您提供任何帮助。

更新:我想我将使用这种方法:

- (void)textFieldDidEndEditing:(UITextField *)textField

在RubyMotion中:     def textFieldDidEndEditing(textField)

我使用log()来确定这确实让我知道用户已经从一个文本域更改为下一个文本域。我只需要做一些调整,以便我可以指定剩下哪个文本字段。

1 个答案:

答案 0 :(得分:4)

您需要将每个文本字段的delegate设置为视图控制器类,然后实现textFieldDidEndEditing方法。这是一个有效的例子:

class MyViewController < UIViewController
  attr_accessor :textField1, :textField2

  def viewDidLoad

    @textField1 = UITextField.alloc.initWithFrame([[10, 100], [300, 40]])
    # Customize your text field...
    @textField2 = UITextField.alloc.initWithFrame([[10, 150], [300, 40]])
    # Customize your text field...
    view.addSubview(@textField1)
    view.addSubview(@textField2)

    @textField1.delegate = self
    @textField2.delegate = self
  end

  def textFieldDidEndEditing(textField)
    if textField == @textField1
      puts 'left textField1'
    elsif textField == @textField2
      puts 'left textField2'
    end
  end
end