IOS textfield 限制汉字输入的方法
来源:互联网 发布:机器视觉算法工程师 编辑:程序博客网 时间:2024/05/16 06:56
这几天在做设置昵称 但是限制汉字输入为10个的时候,发现不太好做,原有的方法限制的只是字符串的长度,但是我们再输入汉字的时候打字拼音的长度也被计算了,有时候输入拼音太长就会被中断,,很麻烦
例如 中国龙(zhonguolong) 实际只有三个字 但是拼音太长直接被砍掉
我在网上找到一些解决方法 但实际都不理想 在他们的基础上有研究了一个上午,勉强可以复合我自己的要求
如下:首先 获取键盘模式
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeMode:)name:@"UITextInputCurrentInputM
-(void) changeMode:(NSNotification *)notification{
NSLog(@"%@",[[UITextInputMode currentInputMode] primaryLanguage]);
}
2011-07-18 14:32:48.565 UIFont[2447:207] zh-Hans //简体汉字拼音
2011-07-18 14:32:50.784 UIFont[2447:207] en-US
2011-07-18 14:32:51.344 UIFont[2447:207] zh-Hans //简体手写
2011-07-18 14:32:51.807 UIFont[2447:207] zh-Hans //简体笔画
2011-07-18 14:32:53.271 UIFont[2447:207] zh-Hant //繁体手写
2011-07-18 14:32:54.062 UIFont[2447:207] zh-Hant //繁体仓颉
2011-07-18 14:32:54.822 UIFont[2447:207] zh-Hant //繁体笔画
NSString *lang = [[UITextInputModecurrentInputMode] primaryLanguage];// 键盘输入模式
这儿方法
UITextRange *selectedRange = [textFieldmarkedTextRange]; 获取字符的range
//获取高亮部分 的position 也就是拼音输入的那部分UITextPosition *position = [textFieldpositionFromPosition:selectedRange.startoffset:0];
//没有高亮选择的字,则对已输入的文字进行字数统计和限制
还需要了解汉字字符串 的关系 获取字符串中汉字的个数
UTF8编码:汉字占3个字节,英文字符占1个字节
NSString *toBeString = @"how to go to 中国";
int chNum =0;
for (int i=0; i<toBeString.length; ++i)
{
NSRange range = NSMakeRange(i,1);
NSString *subString = [toBeString substringWithRange:range];
const char *cString = [subStringUTF8String];
if (strlen(cString) ==3)
{
NSLog(@"汉字:%@",subString);
chNum ++;
}
}
Unicode的官方可以查到这些编码
for
(
int
i=0; i< [str length];i++){
int
a = [str characterAtIndex:i];
if
( a > 0x4e00 && a < 0x9fff)
NSLog
(@
"汉字"
);
得到字符串中的每一个char,char 值大于255的可以看作是汉字
//有了这些准备 就基本解决问题了
在ViewDidload 中注册 不要忘记在 dealloc 中remove 掉通知
_canedit 为一个BOOL 用来判断
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(textFiledEditChanged:)
name:@"UITextFieldTextDidChangeNotification"
object:_suqareName];
-(void)textFiledEditChanged:(NSNotification *)obj{
UITextField *textField = (UITextField *)obj.object;
NSString *toBeString = textField.text;
NSString *lang = [[UITextInputModecurrentInputMode] primaryLanguage];// 键盘输入模式
if ([langisEqualToString:@"zh-Hans"]) {// 简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textField markedTextRange];
//获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.startoffset:0];
//没有高亮选择的字,则对已输入的文字进行字数统计和限制
int chNum =0;
for (int i=0; i<toBeString.length; ++i)
{
NSRange range = NSMakeRange(i,1);
NSString *subString = [toBeString substringWithRange:range];
const char *cString = [subStringUTF8String];
if (strlen(cString) ==3)
{
NSLog(@"汉字:%@",subString);
chNum ++;
}
}
if (chNum>=9) {
_canedit =NO;
}
if (!position) {
if (toBeString.length >10) {
textField.text = [toBeStringsubstringToIndex:10];
_canedit =YES;
}
}
//有高亮选择的字符串,则暂不对文字进行统计和限制
else{
}
}
//中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
else{
if (toBeString.length >20) {
textField.text = [toBeStringsubstringToIndex:20];
_canedit =NO;
}
}
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString * toBeString = [textField.textstringByReplacingCharactersInRange:range withString:string]; //得到输入框的内容
if (toBeString.length<=10) {
_canedit =YES;
}
if (_canedit==NO) { //如果输入框内容大于20则弹出警告
return NO;
}
return YES;
}
我的问题基本解决
- IOS textfield 限制汉字输入的方法
- iOS检查汉字输入的方法集
- iOS开发之textField字符长度限制的方法
- iOS限制TextField可输入的长度
- iOS - TextField的一些输入限制
- iOS如何限制textField的输入格式
- iOS textfield限制输入的最大长度
- ios textfield 输入限制
- textfield 限制长度 iOS
- 解决mathtype中汉字输入不全的方法
- 限制TextField的长度
- iOS TextField电话号码输入限制
- iOS 限制textField字节长度
- iOS中TextField限制小数点
- IOS textField 输入个数限制
- ios textfield和textView完美简单的字数限制
- iOS 怎么限制textView和textField的输入字数
- iOS TextField改变placeholder颜色的方法
- Android环境搭配详解
- Android环境配置
- Python实现的几种排序(来自wiki百科)
- redis info 参数说明
- poj1222 枚举 和 高斯消元
- IOS textfield 限制汉字输入的方法
- ubuntu下在线安装mysql
- Android 手机中不能播放关机动画和铃声?
- android面试题五
- ios中关于delegate(委托)的使用心得
- 瀑布流布局
- 一些能学到东西的题
- Android tabhost+侧滑菜单
- 如何在liunx下编译一个调用到c语言开发的动态库(so文件)的fortran程序。