2012-03-08 25 views
0

也许这是一个简单的问题,但我找不出正确的方法来做到这一点。在不同的UITextFields之间分享验证码

我有一个UITextField。因为我需要验证插入该文本字段中的文本,我目前使用的UITextFieldDelegate方法- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string这样的:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    // do validation here 
    // return YES or NO depending on previous validation 
} 

因为我有一些文本字段(它们不属于同一个控制器,其中验证被执行),我不想复制文本字段验证代码,我如何实现集中化类似验证的优雅方式?我不知道子类是否是正确的方式,但在这种情况下,我需要在同一个应用程序的不同部分使用相同的委派方法(上面列出的方法)。

预先感谢您。

回答

2

这取决于您的验证代码需要多少信息。如果您需要textField:shouldChangeCharactersInRange:replacementString:的参数来确定是否返回YES或NO,那么您可以对所有textField使用相同的代理。

如果您需要跟踪和存储有关以前验证的信息以作出验证决定,最简单的方法是将所有状态打包到一个对象中,并有一个这样的对象的数组,每个对象都对应一个特定的的UITextField。然后,在textField:shouldChangeCharactersInRange:replacementString:中,您将使用与传入的textField对应的状态。

+0

+1您的建议。但是,你的意思是什么?你可以为所有的textFields使用相同的委托? * UITextFields *可以属于包含它们的不同视图控制器。谢谢。 – 2012-03-08 17:21:26

+0

我打电话给你,你是什么意思,并提出你的意思是什么。没有理由为什么两个或两个以上的UITextFields不能在不同的视图控制器中,但具有相同的代理。 – yuji 2012-03-08 17:25:01

+0

我明白了。您建议创建一个“实现”(采用)* UITextFieldDelegate *的不同类对象,然后在需要它的每个控制器中实例化它。然后将该代表设置为文本字段的指定代表。这样对吗? – 2012-03-08 17:35:46