Ios UITextField应将范围内的字符更改为外部函数
我想验证多个视图控制器的UITextField输入。以下工作: 验证.hIos UITextField应将范围内的字符更改为外部函数,ios,objective-c,uitextfielddelegate,Ios,Objective C,Uitextfielddelegate,我想验证多个视图控制器的UITextField输入。以下工作: 验证.h #import <UIKit/UIKit.h> @interface validate : UITextField <UITextFieldDelegate> @end viewController.h #import <UIKit/UIKit.h> #include "limiteTextField.h" @interface ViewController : UIViewCon
#import <UIKit/UIKit.h>
@interface validate : UITextField <UITextFieldDelegate>
@end
viewController.h
#import <UIKit/UIKit.h>
#include "limiteTextField.h"
@interface ViewController : UIViewController <UITextFieldDelegate>
@property (strong, nonatomic) IBOutlet limiteTextField *myTextField;
@end
我希望能够将shouldchangeCharactersRange用作外部函数,这样就不必重写每个视图控制器的所有代码
我希望能够将shouldchangeCharactersRange用作外部函数,这样就不必重写每个视图控制器的所有代码
那就这样做吧。这是一个委托方法。任何东西都可以是代理。是您将文本字段的委托设置为不同的视图控制器!如果你不想那样做,那就不要。有一些单一的持久对象,或者同一类的至少多个实例,并将其作为文本字段的委托。现在,所有文本字段都可以使用同一个委托,该委托只有一个
shouldchangeCharactersRange
的实现。一种方法是使用单例创建某种验证程序类,并将其指定为textfields委托:
TextFieldValidator.h
#import <UIKit/UIKit.h>
@interface TextFieldValidator : NSObject <UITextFieldDelegate>
+ (instancetype)sharedValidator;
@end
SomeViewController.m
#import "TextFieldValidator.h"
@implementation TextFieldValidator
+ (instancetype)sharedValidator {
static TextFieldValidator *sharedValidator = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedValidator = [[self alloc] init];
});
return sharedValidator;
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *allowedCharacters = [NSCharacterSet decimalDigitCharacterSet];
return [[textField.text stringByReplacingCharactersInRange:range withString:string] rangeOfCharacterFromSet:allowedCharacters.invertedSet].location == NSNotFound;
}
@end
// [...]
self.textField.delegate = [TextFieldValidator sharedValidator];
// [...]
创建一个文本字段的自定义类,并将其设置为每个文本字段的视图控制器。我应该问你这样做的最佳方法-我相对无知,这就是为什么我给了你一个解决方案。
#import "TextFieldValidator.h"
@implementation TextFieldValidator
+ (instancetype)sharedValidator {
static TextFieldValidator *sharedValidator = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedValidator = [[self alloc] init];
});
return sharedValidator;
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *allowedCharacters = [NSCharacterSet decimalDigitCharacterSet];
return [[textField.text stringByReplacingCharactersInRange:range withString:string] rangeOfCharacterFromSet:allowedCharacters.invertedSet].location == NSNotFound;
}
@end
// [...]
self.textField.delegate = [TextFieldValidator sharedValidator];
// [...]