您的位置:首页 > 产品设计 > UI/UE

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

2015-12-08 22:34 711 查看
上两篇简述了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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息