UItextfield 禁止輸入表情

首先在代理方法寫上:

//??????? 禁止輸入表情
??????? BOOL emoji= [self stringContainsEmoji:self.addTeamsNameField.text];
?????? ?
??????? if (emoji){
?????????? ?
??????????? //最后輸入的是表情截取掉
??????????? self.addTeamsNameField.text = [self.addTeamsNameField.text substringToIndex:self.addTeamsNameField.text.length -2];
?????????? ?
??????? }
?????? ?
??????? if ([self isInputRuleNotBlank:string] || [string isEqualToString:@""]) {//當(dāng)輸入符合規(guī)則和退格鍵時(shí)允許改變輸入框
?????????? ?
??????????? return YES;
??????? } else {
??????????? return NO;
??????? }


另外寫入一下三個(gè)方法:

//是否包含表情符

+ (BOOL)stringContainsEmoji:(NSString *)string

{


? ? __block BOOL returnValue = NO;




? ? [string enumerateSubstringsInRange:NSMakeRange(0, [string length])


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? options:NSStringEnumerationByComposedCharacterSequences


? ? ? ? ? ? ? ? ? ? ? ? ? ? usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? const unichar hs = [substring characterAtIndex:0];


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (0xd800 <= hs && hs <= 0xdbff) {


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (substring.length > 1) {


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? const unichar ls = [substring characterAtIndex:1];


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (0x1d000 <= uc && uc <= 0x1f77f) {


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? returnValue = YES;


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } else if (substring.length > 1) {


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? const unichar ls = [substring characterAtIndex:1];


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (ls == 0x20e3) {


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? returnValue = YES;


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } else {


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (0x2100 <= hs && hs <= 0x27ff) {


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? returnValue = YES;


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } else if (0x2B05 <= hs && hs <= 0x2b07) {


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? returnValue = YES;


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } else if (0x2934 <= hs && hs <= 0x2935) {


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? returnValue = YES;


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } else if (0x3297 <= hs && hs <= 0x3299) {


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? returnValue = YES;


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) {


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? returnValue = YES;


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }


? ? ? ? ? ? ? ? ? ? ? ? ? ? }];




? ? return returnValue;


}

/**

* 字母眠冈、數(shù)字囊陡、中文正則判斷(不包括空格)

*/

- (BOOL)isInputRuleNotBlank:(NSString *)str {

? ? NSString *pattern = @"[????????\0-9a-zA-Z\u4e00-\u9fa5\\.\\*\\)\\(\\+\\$\\[\\?\\\\\\^\\{\\|\\]\\}%%%@\'\",。‘飞几、-【】·!_——=:;末秃;<>《》‘’“”!#~丙挽!#¥%……&*()]+";

? ? NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];

? ? BOOL isMatch = [pred evaluateWithObject:str];

? ? return isMatch;

}

- (void)textFieldDidChange:(NSNotification *)obj{

? ? UITextView *textField = obj.object;

? ? NSString *toBeString = textField.text;


? ? NSString *lang = [[textField textInputMode] primaryLanguage]; // 獲取當(dāng)前鍵盤輸入模式

? ? if([lang hasPrefix:@"zh-Hans"]) {

? ? ? ? UITextRange *selectedRange = [textField markedTextRange];

? ? ? ? //獲取高亮部分

? ? ? ? UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];

? ? ? ? //沒(méi)有高亮選擇的字守屉,則對(duì)已輸入的文字進(jìn)行字?jǐn)?shù)統(tǒng)計(jì)和限制

? ? ? ? if(!position) {

? ? ? ? ? ? NSString *getStr = [self getSubString:toBeString];

? ? ? ? ? ? if(getStr && getStr.length > 0) {

? ? ? ? ? ? ? ? textField.text = getStr;

? ? ? ? ? ? }

? ? ? ? }

? ? } else{

? ? ? ? NSString *getStr = [self getSubString:toBeString];

? ? ? ? if(getStr && getStr.length > 0) {

? ? ? ? ? ? textField.text= getStr;

? ? ? ? }

? ? }


}

/**

*? 獲得 kMaxLength長(zhǎng)度的字符

*/

-(NSString *)getSubString:(NSString*)string

{

? ? NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

? ? NSData* data = [string dataUsingEncoding:encoding];

? ? NSInteger length = [data length];

? ? if (length > 32) {

? ? ? ? NSData *data1 = [data subdataWithRange:NSMakeRange(0, 32)];

? ? ? ? NSString *content = [[NSString alloc] initWithData:data1 encoding:encoding];

? ? ? ? if (!content || content.length == 0) {

? ? ? ? ? ? data1 = [data subdataWithRange:NSMakeRange(0, 32 - 1)];

? ? ? ? ? ? content =? [[NSString alloc] initWithData:data1 encoding:encoding];

? ? ? ? }

? ? ? ? return content;

? ? }

? ? return nil;

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隅忿,一起剝皮案震驚了整個(gè)濱河市膊爪,隨后出現(xiàn)的幾起案子入客,更是在濱河造成了極大的恐慌管毙,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桌硫,死亡現(xiàn)場(chǎng)離奇詭異夭咬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)铆隘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門卓舵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人膀钠,你說(shuō)我怎么就攤上這事掏湾。” “怎么了肿嘲?”我有些...
    開(kāi)封第一講書人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵融击,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我雳窟,道長(zhǎng)砚嘴,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮际长,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兴泥。我一直安慰自己工育,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布搓彻。 她就那樣靜靜地躺著如绸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旭贬。 梳的紋絲不亂的頭發(fā)上怔接,一...
    開(kāi)封第一講書人閱讀 49,850評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音稀轨,去河邊找鬼扼脐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛奋刽,可吹牛的內(nèi)容都是我干的瓦侮。 我是一名探鬼主播,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼佣谐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肚吏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起狭魂,我...
    開(kāi)封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤罚攀,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后雌澄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體斋泄,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年掷伙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了是己。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡任柜,死狀恐怖卒废,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宙地,我是刑警寧澤摔认,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站宅粥,受9級(jí)特大地震影響参袱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一抹蚀、第九天 我趴在偏房一處隱蔽的房頂上張望剿牺。 院中可真熱鬧,春花似錦环壤、人聲如沸晒来。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)湃崩。三九已至,卻和暖如春接箫,著一層夾襖步出監(jiān)牢的瞬間攒读,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工辛友, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留薄扁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓瞎领,卻偏偏與公主長(zhǎng)得像泌辫,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子九默,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容