
网上有很多介绍输入限制的文章
原理请参看这篇文章,我只是做了一个简单的封装而已
这里可以贴出全部代码
1 2 3 4 5
|
#import <UIKit/UIKit.h>
@interface UITextField (TMRInputLimit) - (void)inputLimitWithMaxLength:(NSInteger)maxLength; @end
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#import "UITextField+TMRInputLimit.h" #import <objc/runtime.h> @interface UITextField () @property (assign, nonatomic) NSNumber *maxLength; @end @implementation UITextField (TMRInputLimit)
- (void)setMaxLength:(NSNumber *)maxLength { objc_setAssociatedObject(self, @selector(maxLength), maxLength, OBJC_ASSOCIATION_ASSIGN); }
- (NSNumber *)maxLength { return objc_getAssociatedObject(self, @selector(maxLength));
}
- (void)inputLimitWithMaxLength:(NSInteger)maxLength { self.maxLength = [NSNumber numberWithInteger:maxLength]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldEditChanged:) name:@"UITextFieldTextDidChangeNotification" object:self]; }
- (void)textFieldEditChanged:(NSNotification *)obj { NSInteger maxLength = [self.maxLength integerValue]; UITextField *field = (UITextField *)obj.object; NSString *toBeString = field.text; UITextRange *selectedRange = [field markedTextRange]; UITextPosition *position = [field positionFromPosition:selectedRange.start offset:0]; if (!position || !selectedRange) { if (toBeString.length > maxLength) { NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:maxLength]; if (rangeIndex.length == 1) { field.text = [toBeString substringToIndex:maxLength]; } else { NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, maxLength)]; field.text = [toBeString substringWithRange:rangeRange]; } } } }
- (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UITextFieldTextDidChangeNotification" object:self]; }
@end
|
使用时import这个分类
1
|
[_textField inputLimitWithMaxLength:6];
|
近期评论