前言
最近在做一個項目,其中要求所有可以輸入的輸入框都要限制長度斯入,一共要求是12個字符砂碉,就是說中文最多只能輸入6個,英文刻两,數(shù)字可以輸入12個增蹭。因為之前沒有接觸過這個,所以在網(wǎng)上查了很多代碼片段磅摹,按照方法實現(xiàn)之后滋迈,發(fā)現(xiàn)第一個問題,就是英文户誓,數(shù)字饼灿,漢字都可以輸入12個,明顯是不對的厅克,后來找到個新的方法赔退,但是如果你要是使用鍵盤的聯(lián)想輸入的時候,會發(fā)現(xiàn)控制不了長度了证舟,或者當(dāng)輸入一連串的話的時候,但是發(fā)現(xiàn)只剩一個字節(jié)的時候窗骑,會打不出來女责,所以我開始研究如何控制這個地方。
代碼
1.首先注冊通知
//注冊通知创译,textfield內(nèi)容改變調(diào)用
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:self.tf];
2.在通知方法中控制
//通知
- (void)textFieldDidChange:(NSNotification *)note
{
UITextRange *selectedRange = [_tf markedTextRange];
//獲取高亮部分
UITextPosition *position = [_tf positionFromPosition:selectedRange.start offset:0];
//? ? NSLog(@"%@", position);
if (!position) {
//獲取文本框內(nèi)容的字節(jié)數(shù)
int bytes = [self stringConvertToInt:self.tf.text];
//設(shè)置不能超過12個字節(jié)抵知,因為不能有半個漢字,所以以字符串長度為單位软族。
if (bytes > 6)
{
//超出字節(jié)數(shù)刷喜,還是原來的內(nèi)容
self.tf.text = self.lastTextContent;
}
else
{
self.lastTextContent = self.tf.text;
}
}else {
}
}
3./**
*? 得到字節(jié)數(shù)
*
*? @param strtemp 要獲取字節(jié)的字符串
*
*? @return 返回字節(jié)數(shù)+1的一半,因為不會有半個漢字
*/
-? (int)stringConvertToInt:(NSString*)strtemp
{
int strlength = 0;
char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];
for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {
if (*p) {
p++;
strlength++;
}
else {
p++;
}
}
return (strlength+1)/2;
}
4.在textfiled的代理方法中立砸,將textfile的原來的內(nèi)容放在textfiled中
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
self.lastTextContent = _firstTf.text;
return YES;
}
獲取高亮的部分 就是避免輸入一串漢字的時候掖疮,不能輸入。 參考的別人的代碼颗祝,自己做了一下修改浊闪。實現(xiàn)了自己的需求恼布,有什么錯誤,希望大家指正搁宾。