UITextField目标/操作与委托方法

时间:2012-05-20 21:43:22

标签: ios delegates uitextfield target-action rubymotion

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

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

for when

但是,我没有以编程方式完成所有操作(在rubymotion中,虽然不一定相关)并查看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方法一样。

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

反馈意见, pachun

2 个答案:

答案 0 :(得分:1)

这与目标/行动无关。我假设你在Interface Builder中意味着你要从UITextField拖到File's Owner并从HUD中选择委托。

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

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

以上假设创建UITextField的类将作为其委托。

答案 1 :(得分:0)

我不知道在这种情况下,委托和目标/行动之间是否存在任何差异,但这种方式的授权有效:

- (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;
}

此致