iOS UITextField实用限制字符长度(中英文)—— HERO博客

上两篇简述了UITextField的属性及方法和简单使用,本篇实际应用实现限制字符长度,中文汉字及中文符号算两位,英文和数字算一位。

具体属性及方法可以参考:

UITextField简介:UITextField简介

UITextField实用实现手机账号3位4位4位格式:UITextField实用实现手机账号344格式

实例直接上代码:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end

#import "ViewController.h"

struct HWTitleInfo {
    NSInteger length;
    NSInteger number;
};
typedef struct HWTitleInfo HWTitleInfo;

@interface ViewController ()

@property (nonatomic, strong) UITextField *login;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];
    
    //创建控件
    [self creatControl];
}

- (void)creatControl
{
    //lable
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(30, 100, 60, 30)];
    label.text = @"账号:";
    [self.view addSubview:label];
    
    //账号textField初始化
    self.login = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 200, 30)];
    //提醒文字
    _login.placeholder = @"请输入账号";
    //边界样式
    _login.borderStyle = UITextBorderStyleRoundedRect;
    //textField变化时事件
    [_login addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged];
    [self.view addSubview:_login];
}

//点击空白区域,隐藏键盘
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //结束编辑
    [self.view endEditing:YES];
}

//限制标题长度,数字及英文1,中文及中文符号2
- (void)textFieldEditingChanged:(UITextField *)textField
{
    NSInteger maxLength = 10;
    
    HWTitleInfo title = [self getInfoWithText:textField.text maxLength:maxLength];
    
    if (title.length > maxLength) {
        textField.text = [textField.text substringToIndex:title.number];
    }
}

//判断中英混合的的字符串长度及字符个数
- (HWTitleInfo)getInfoWithText:(NSString *)text maxLength:(NSInteger)maxLength
{
    HWTitleInfo title;
    int length = 0;
    int singleNum = 0;
    int totalNum = 0;
    char *p = (char *)[text cStringUsingEncoding:NSUnicodeStringEncoding];
    for (int i = 0; i < [text lengthOfBytesUsingEncoding:NSUnicodeStringEncoding]; i++) {
        if (*p) {
            length++;
            if (length <= maxLength) {
                totalNum++;
            }
        }
        else {
            if (length <= maxLength) {
                singleNum++;
            }
        }
        p++;
    }
    
    title.length = length;
    title.number = (totalNum - singleNum) / 2 + singleNum;
    
    return title;
}

@end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值