UiTextField对输入的长度进行限制并提示用户还可输入的长度

最近想做用户昵称的限制,但是网上百度了很多方法效果都不是我自己想要的,终于找到种方法

如下:

1、声明两个属性 

nickname是昵称的textfleld

canEditSizeLAbel是提示用户剩余可添加的数

@property (weak, nonatomic) IBOutlet UITextField *nickName;
@property(nonatomic,strong)UILabel *canEditSizeLabel;//可编辑数的label

2 给textfield添加一个点击事件,用来监听字数的变化

 //给textfield添加一个点击事件用来监听字数的变化
    self.nickName.userInteractionEnabled = YES;
    [self.nickName addTarget:self action:@selector(limitLength:) forControlEvents:UIControlEventEditingChanged];

 3、监听用户的输入

//监听textfield的字数长度的变化
-(void)limitLength:(UITextField *)sender
{
    //判断当前输入法是否是中文
    bool isChinese;
    if ([[[UITextInputMode currentInputMode] primaryLanguage] isEqualToString: @"en-US"]) {
        isChinese = false;
    }
    else
    {
        isChinese = true;
    }
    
    
    if(sender == self.nickName) {//判断当前输入框是我想要的输入框
        // 8位
        NSString *str = [[self.nickName text] stringByReplacingOccurrencesOfString:@"?" withString:@""];
        if (isChinese) { //中文输入法下
            UITextRange *selectedRange = [self.nickName markedTextRange];
            //获取高亮部分
            UITextPosition *position = [self.nickName positionFromPosition:selectedRange.start offset:0];
            
            // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
            if (!position) {
//                NSLog(@"汉字");
                if ( str.length>8) {//长度大于8时进行截取
                    NSString *strNew = [NSString stringWithString:str];
                    [self.nickName setText:[strNew substringToIndex:8]];
                }
                
                //改变提示信息
                _canEditSizeLabel.text = [NSString stringWithFormat:@"还可输入%ld个字",8-(self.nickName.text.length)];
            }
            else
            {
//                NSLog(@"输入的英文还没有转化为汉字的状态");
                
            }
        }else{//非中文输入法下
//            NSLog(@"str=%@; 本次长度=%d",str,[str length]);
            if ([str length]>8) {
                NSString *strNew = [NSString stringWithString:str];
                [self.nickName setText:[strNew substringToIndex:8]];
            }
            
            
            _canEditSizeLabel.text = [NSString stringWithFormat:@"还可输入%ld个字",8-(self.nickName.text.length)];
        }
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Windows Community

Windows 8.1 应用再出发 (WinJS) - 几种新增控件(2)

上篇我们介绍了Windows 8.1 和 WinJS 中新增控件中的 AppBarCommand、BackButton、Hub、ItemContainer,本篇...

3236
来自专栏向治洪

React Native导航器之react-navigation使用

在上一节Navigation组件,我们使用系统提供的导航组件做了一个跳转的例子,不过其实战能力不强,这里推荐一个超牛逼的第三方库:react-navigatio...

1.9K7
来自专栏程序员同行者

jquery操作select(取值,设置选中)

1952
来自专栏finleyMa

使用react-native-tab-navigator切换页面

切换页面是app最基本功能。这个功能需要用Navigation组件实现。 RN发展太快了(v49),之前自带的Navigation组件被弃用了,如果只针对io...

7662
来自专栏吴伟祥

IDEA的快捷键应用 原

Ctrl+Shift+Alt+鼠标 (左手按着ctrl+shift+alt右手鼠标点击想要选择的位置)

963
来自专栏CSDN技术头条

React开发实践:如何做出好用的Switch组件

前言 HTML5 将 Web 开发者的战场从传统的 PC 端带到了移动端。然而移动端交互的核心在于手势和滑动,如果只是将 PC 端的点击体验简单地移植到移动端,...

2519
来自专栏林德熙的博客

win10 uwp 自定义控件 SplitViewItem SplitView 从右划出

本文主要是因为汉堡菜单里面列出的菜单很多重复的图标和文字,我把它作为控件,因为是随便写,可能存在错误,如果发现了,请和我说或关掉浏览器,请不要发不良言论。

1182
来自专栏Nian糕的私人厨房

CSS 鼠标悬停图片,显示隐藏文本

我在 JavaScript 鼠标悬停图片,显示隐藏文本 这篇博文当中实现了同样的效果,只不过是通过 JS 来实现的,但其实,通过 CSS 动画也能实现同样的效果...

1294
来自专栏刘望舒

React Native探索之组件的属性和状态

在Android或者iOS开发中我们会用到很多控件,这些控件会有很多的属性、样式等等。同样的,React Native中的组件也有属性、样式和状态。

1413
来自专栏ShaoYL

键盘工具栏的快速集成--IQKeyboardManager

41211

扫码关注云+社区

领取腾讯云代金券