【问题标题】:Call method when user changes focus from on textfield to another (RubyMotion)当用户将焦点从文本字段更改为另一个时调用方法(RubyMotion)
【发布时间】:2023-03-30 07:00:01
【问题描述】:

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

我有一个带有 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() 确定这确实让我知道用户已从一个文本字段更改为下一个文本字段。我只需要做一些调整,以便我可以指定留下哪个文本字段。

【问题讨论】:

    标签: ios textfield first-responder rubymotion


    【解决方案1】:

    您需要将每个文本字段的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
    

    【讨论】:

    • 肝;开始行动;我试图了解使用self.textField1 = UITextField.alloc.etc... 立即设置代表与之后设置它有什么区别@textField1.delegate = self (这种最初的“立即”方法不起作用,但你的方法……想了解这两者有何不同)
    猜你喜欢
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多