我正在尝试制作自定义TextField(KSTextField)。我从UITextField继承了我的文本字段。正如您可以在下面看到我的KSTextField.h文件。
#import <UIKit/UIKit.h>
#import <UIKit/UITextField.h>
@interface KSTextField : UITextField {}
@end
在我的KSTextField.m中,我试图设置一个虚拟文本属性。但它不起作用。 super.text用法是错误的吗?
我的主要目的是制作一个自定义的UITextField,它只允许我的项目所需的大写字符。
#import "KSTextField.h"
@implementation KSTextField
- (id)init {
self = [super init];
super.text = @"help";
return self;
}
- (void)textFieldDidChangeForKS:(KSTextField *)textField {
self.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
NSString *textToUpper = [textField.text uppercaseString];
[self setText:textToUpper];
}
@end
我的ViewController.h也在
之下#import <UIKit/UIKit.h>
#import "KSTextField.h"
@interface ViewController : UIViewController
@property (nonatomic, copy) IBOutlet KSTextField *txtKsName;
@end
这是我的ViewController.m,我想设置我的KSTextField.text
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.txtKsName = [[KSTextField alloc] init];
}
委托活动无法解决我的问题。因为我稍后会添加更多功能。这将是我的自定义文本域谢谢!
答案 0 :(得分:2)
答案是:你做错了!您不必子类只允许使用大写字符。使用UITextFieldDelegate
:
使用textField:shouldChangeCharactersInRange:replacementString:
方法,您可以说是否允许将键入的字符添加到框中。
尝试这样的事情:
- (BOOL)textField:(UITextField *)field shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)characters
{
NSCharacterSet *blockedCharacters = [[[NSCharacterSet uppercaseLetterCharacterSet] invertedSet] retain];
return ([characters rangeOfCharacterFromSet:blockedCharacters].location == NSNotFound);
}