TextField 一行代码搞定输入限制

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

这里可以贴出全部代码

#import <UIKit/UIKit.h>

@interface UITextField (TMRInputLimit)
- (void)inputLimitWithMaxLength:(NSInteger)maxLength;
@end
#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这个分类

[_textField inputLimitWithMaxLength:6];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,282评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,232评论 4 61
  • 一、今日计划 学习任务:做自己的CEO宣讲会预计成果:收听宣讲会,做笔记预计时间:1.5h实际时间:0800 - ...
    RicciWoo阅读 659评论 0 50
  • 以前总是老跟自己较劲喜欢一个人就一股脑的喜欢就有着一种每天荷尔蒙随时迸发的感觉,可是随着时间推移两个人把这层窗户纸...
    黄少爷阅读 372评论 0 1
  • 你是否被别人的抱怨情绪喂养?是否又用自己的抱怨喂养别人? 前段时间一个朋友S突然在微信上找我聊天,他说自己心情很差...
    爱逗子阅读 375评论 0 2