Ios UITextField应将范围内的字符更改为外部函数

Ios 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

我想验证多个视图控制器的UITextField输入。以下工作:

验证.h

#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];

// [...]