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
具体属性及方法可以参考:
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
相关文章推荐
- Swift社交应用文本输入优化汇总
- UITextField常用delegate
- UITextField
- iOS开发1:UITextField控件属性
- [Swift]UIKit学习之UITextField的用法
- IOS开发Swift语言UITextField设置靠左的间距
- IOS开发Swift语言键盘遮挡输入框(UITextField)
- cocos2d-x 一些有用的函数
- UITextField的使用
- UITextView光标位置的设置
- UISearchbar设置placeholder字体颜色大小
- 第一个IOS程序(代码版)
- iOS-TextField知多少 (1)
- iOS-TextField知多少 (2)
- 微信聊天
- IOS Label 同步 UITextfield 显示输入内容(删除)
- iOS中UITextField 使用全面解析
- UITextField的文本特征属性
- iOS UI 第二课 UITextField UIButton
- 判断UITextField中字符是否为空