gpt4 book ai didi

ios - 子类化 UITextField

转载 作者:可可西里 更新时间:2023-11-01 06:23:15 30 4
gpt4 key购买 nike

我想创建一个使用数字键盘并仅接受数字的文本字段,即使在粘贴时也是如此。目前,我有一个标题:

#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:。有任何想法吗?作为更多上下文,这些文本字段嵌入在 TableView Controller 的 TableView 的表单元格中。其中,我在这里提供了 TableView 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

因此,除了库存之外,它实际上没有实现的功能。它的 header 很明显。

编辑:正如一些人所指出的,我不需要子类化文本字段来实现委托(delegate)功能。我可以把它放在别处。但我的问题是:为什么我在这里介绍的内容不起作用?我找不到我的错误。

最佳答案

您还需要覆盖 DRPNumberTextField 中的 - (id)initWithCoder:(NSCoder *)decoder。如果您在 XIB 或 Storyboard中使用自定义 UITextField,则不会调用 initWithFrame:,而是调用 initWithCoder:

关于ios - 子类化 UITextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20876250/

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