一行代码搞定textfield输入限制

网上有很多介绍输入限制的文章
原理请参看这篇文章,我只是做了一个简单的封装而已

这里可以贴出全部代码

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