我想创建一个文本字段,它使用数字键盘并只接受数字,即使粘贴时也是如此。目前,我有一个标题:
#import <UIKit/UIKit.h>
@interface DRPNumberTextField : UITextField <UITextFieldDelegate>
@end
和一个实现:
#import "DRPNumberTextField.h"
@implementation DRPNumberTextField
- (id) initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
self.delegate = self;
[self setKeyboardType:UIKeyboardTypeNumberPad];
}
return self;
}
- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ([string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound)
{
return NO;
}
return YES;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
我已将文本字段设置为在 Storyboard中使用此类。但是,我想要的功能没有出现。此外,根据调试确定, initWithFrame: 永远不会被调用。有任何想法吗?作为更多上下文,这些文本字段嵌入在表 View Controller 的表 View 的表单元格内。其中,我在这里提供了表格 View Controller 的自定义实现:
@interface DRPImplementSettingsViewController ()
@end
@implementation DRPImplementSettingsViewController
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
@end
因此,除了库存之外,它确实没有实现的功能。它的标题是显而易见的。
编辑:正如有些人指出的那样,我不需要对文本字段进行子类化来实现委托(delegate)功能。我可以把它放在别处。但我的问题是:为什么我在这里介绍的内容不起作用?我找不到我的错误。
最佳答案
您还需要覆盖 DRPNumberTextField 中的 - (id)initWithCoder:(NSCoder *)decoder
。如果您在 XIB 或 Storyboard中使用自定义 UITextField
,则不会调用 initWithFrame:
,而是调用 initWithCoder:
。
关于ios - 子类化 UITextField,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20876250/