gpt4 book ai didi

objective-c - 如何在 Objective-C 中设置文本字段的委托(delegate)?

转载 作者:技术小花猫 更新时间:2023-10-29 10:44:46 25 4
gpt4 key购买 nike

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

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

LimitedLengthTextField.h:

@interface LimitedLengthTextField : UITextField <UITextFieldDelegate>
@end

2) 在 LimitedLengthTextField.m 中实现了以下方法:

@implementation LimitedLengthTextField

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

@end

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

// Set the custom SSN textfield delegate
LimitedLengthTextField *custTextField = [[LimitedLengthTextField alloc] init];
[self.ssnTextField setDelegate:custTextField];

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

最佳答案

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

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

并在您的 CreateAccount.m 文件中实现:

这可能在您的 viewDidLoad 方法中:

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

关于objective-c - 如何在 Objective-C 中设置文本字段的委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11837188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com