2

我曾经使用 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 方法那样通过输入字段(我有两个;电子邮件和密码)。

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

反馈赞赏,pachun

4

2 回答 2

1

这与目标/动作无关。我假设您的意思是在 Interface Builder 中,您将从 HUD 中拖动UITextFieldFile's Owner选择委托。

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

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

以上假设创建UITextField's 的类将充当它们的代表。

于 2012-05-25T13:46:33.753 回答
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;
}

问候

于 2012-05-20T22:48:50.113 回答