【问题标题】:UITextField Target/Action vs Delegate MethodsUITextField 目标/操作与委托方法
【发布时间】:2012-05-20 21:43:22
【问题描述】:

我曾经使用 XCode 来开发我的应用程序并使用它;我可以在 IB/Storyboard 中创建一个链接来合成这些方法:

- (void)addTarget:(id)target action:(SEL)action forControlEvents: (UIControlEvents)controlEvents

什么时候

但是,不,我是以编程方式完成的(在 ruby​​motion 中,虽然不一定相关)并查看 UITextField 的文档,我发现了一些委托方法,我实现如下:

def textFieldShouldReturn(text_field)
  text_field.resignFirstResponder
end

def textFieldShouldEndEditing(text_field)
  # this is for validations; don't set a first responder here
  true
end

def textFieldDidEndEditing(text_field)
  text_field == @email_field ? @password_field.becomeFirstResponder : delegate.validate_login_info
end

但是使用这个,我发现我无法像以前使用 addTarget 方法那样在输入字段(我有两个;电子邮件和密码)之间切换。

这两种方法有什么区别?前者是否在幕后实现了后者?我不明白为什么一个会允许我通过标签,而另一个不会。我只是实现了委托方法与幕后的目标/动作方法不同吗?

感谢您的反馈, 巴春

【问题讨论】:

    标签: ios delegates uitextfield target-action rubymotion


    【解决方案1】:

    这与目标/动作无关。我假设你的意思是在 Interface Builder 中你会从 UITextField 拖动到 File's Owner 并从 HUD 中选择委托。

    执行上述操作将产生分配 textField 的委托的效果,您需要在这样的代码中执行此操作

    @email_field.delegate    = self
    @password_field.delegate = self
    

    以上假设创建UITextField 的类将充当它们的委托。

    【讨论】:

      【解决方案2】:

      我不知道在这种情况下委托和目标/动作之间是否有任何区别,但是这种委托方式有效:

      - (BOOL)textFieldShouldReturn:(UITextField *)textField
      {
          if (textField == self.firstTextField)
          {
              [self.secondTextField becomeFirstResponder];
          }
          else if (textField == self.secondTextField)
          {
              [textField resignFirstResponder];
              // proceed with login
          }
          return YES;
      }
      
      - (BOOL)textFieldShouldEndEditing:(UITextField *)textField
      {
          // Validation
          return YES;
      }
      

      问候

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-26
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多