如何在Objective-C中设置文本字段的委托?

如何在Objective-C中设置文本字段的委托?,objective-c,ios,delegates,uitextfield,Objective C,Ios,Delegates,Uitextfield,我想通过将UITextField限制为四个字符来定制它。我试图了解学员如何在Objective-C中工作,并且已经完成了以下步骤来实现此功能,但仍然没有找到有效的解决方案 1) 创建了LimitedLengthTextField objective-c类。使类的类型为UITextField,并接受类型为的对象 LimitedLengthTextField.h: @interface LimitedLengthTextField : UITextField <UITextFieldDeleg

我想通过将
UITextField
限制为四个字符来定制它。我试图了解学员如何在
Objective-C
中工作,并且已经完成了以下步骤来实现此功能,但仍然没有找到有效的解决方案

1) 创建了LimitedLengthTextField objective-c类。使类的类型为
UITextField
,并接受类型为的对象

LimitedLengthTextField.h:

@interface LimitedLengthTextField : UITextField <UITextFieldDelegate>
@end
3) 在我的CreateCount类中导入了“LimitedLengthTextField.h”,并尝试在
viewDidLoad
中设置UITextField“ssnTextField”的委托,如下所示(我的应用程序接受用户SSN的最后4位数字)


基于我对
Objective-C
和委托的有限理解,我现在创建了一个类,实现了我想要的委托方法,然后创建了该类的一个实例,并将其分配给我的UITextView对象。我缺少什么?

也许您应该使CreateCount(我假设它是一个包含文本字段的视图控制器?)符合
UITextFieldDelegate
而不是自定义文本字段,并在CreateCount类中实现
shouldChangeCharactersRange
方法。此外,将委托更改为

_ssn.delegate = self;

在这种情况下,您可能根本不需要自定义文本字段。

应该实现该方法的文本字段应该是LimitedLengthTextField类型。只需将其他类型设置为UITextField

即可。您正在将委托设置为本地对象,我假定该对象在当前范围的末尾被解除分配。您负责确保委托的寿命至少与其对应对象的寿命相同。更好的方法是在视图控制器中实现委托方法,并将自定义字段的委托设置为该方法。它只会影响其中一个,而不会影响其他人。另一种方法是使用私有类在内部实现委托。然后您只需要设置类并完成操作。

您不应该将UITextField子类化。而是在CreateAccount类中实现回调。所以你应该有这样的东西:

@interface CreateAccount :UIViewController <UITextFieldDelegate>
// I use UIViewController but whatever your CreateAccount from.
还有这个

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 4) ? NO : YES;
}

问题是我还有6个UITextFields不应该实现textField:shouldChangeCharactersInRange。有没有办法只为一个UITextField而不是所有UITextField设置它?您可以将受限文本字段声明为属性,然后在方法中执行检查,如if(textField==self.limitedTextField)。我尝试导入“LimitedLengthTextField.h”在CreateAccount.h中,将_ssn对象从UIField类型更改为LimitedLengthTextField,但这没有改变任何内容。您是否使用nib构建UI?如果是这样,请确保您也在那里更改了类名。没问题。我只是在贴了我的照片后才看到塞尔基的。祝你好运。有人能详细解释一下吗:-Self.cusTextField.delegate=Self;如果有多个文本字段,我想将它们全部委派,那该怎么办?如果你明白我想说的话。@dreamBegin在此,在self.cusTextField.delegate中,“self”表示CreateCount实例,它是ViewController类型,cusTextField应该是作为TextField的IBOutlet创建的属性。在“=self”中,您将委托设置为self,因为您正在为CreateCount实现UITextFieldDelegate协议,并且您将通过在CreateCount.mAnd中为多个文本字段定义shouldChangeCharactersRange来处理委托事件,我想您只需要在viewDidLoad中定义多个委托,就像在cusTextField中一样,在ShouldCharactersRange中,您可以检查作为此方法参数的“textField”是否与您定义的IBOutlet UITextField实例匹配。您好,我正在尝试做同样的事情。我对objective-C有点陌生。你能告诉我“\u ssn”是什么类型吗?它是(NSString*)\u ssn吗?或者它是自定义UITextField元素的outlet变量?它是SSN textfield的outlet。我将更新代码示例,使其更加清晰。
@interface CreateAccount :UIViewController <UITextFieldDelegate>
// I use UIViewController but whatever your CreateAccount from.
Self.cusTextField.delegate = self;
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 4) ? NO : YES;
}