首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Objective-C中设置文本字段的委托?

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

Stack Overflow用户
提问于 2012-08-07 07:06:24
回答 4查看 26.9K关注 0票数 11

我想自定义一个UITextField,将其限制为四个字符。我正在尝试理解委托是如何在Objective-C中工作的,并经历了以下步骤来实现此功能,但仍然没有得到一个有效的解决方案。

1)创建了一个LimitedLengthTextField objective-c类。创建UITextField类型的类和接受< UITextFieldDelegate >类型的对象。

LimitedLengthTextField.h:

代码语言:javascript
运行
复制
@interface LimitedLengthTextField : UITextField <UITextFieldDelegate>
@end

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

代码语言:javascript
运行
复制
@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的委托,如下所示(我的应用接受用户SSN的后4位)。

代码语言:javascript
运行
复制
// Set the custom SSN textfield delegate
LimitedLengthTextField *custTextField = [[LimitedLengthTextField alloc] init];
[self.ssnTextField setDelegate:custTextField];

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-07 10:59:43

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

代码语言:javascript
运行
复制
@interface CreateAccount :UIViewController <UITextFieldDelegate>
// I use UIViewController but whatever your CreateAccount from.

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

这可能在您的viewDidLoad方法中:

代码语言:javascript
运行
复制
Self.cusTextField.delegate = self;

还有这个

代码语言:javascript
运行
复制
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 4) ? NO : YES;
}
票数 21
EN

Stack Overflow用户

发布于 2012-08-07 07:13:21

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

代码语言:javascript
运行
复制
_ssn.delegate = self;

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

票数 2
EN

Stack Overflow用户

发布于 2012-08-07 07:20:19

应实现该方法的文本字段应为LimitedLengthTextField类型。只要其他类型为UITextField就可以了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11837188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档