在项目开发中,遇到个很奇怪的问题, 在iOS系统自带的九宫格键盘下,UITextView
控件的- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
代理方法会调用屡次测试
项目须要实现的是@
功能,当检测到输入的单个字符是@
时,跳出@ Controller 的控制器,选中后又跳回界面spa
问题缘由多是因为九宫格下,输入的第一个字符不是@
字符,当再次选择@
符号时,会再次调用代理方法,将第一次输入的替换掉代理
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { NSLog(@"%@", text); return yes; }
步骤:code
切换到九宫格键盘侠,输入内容须要时`@`符
测试结果: 图片
__注意:__此问题在第三方好比输入法搜狗以及系统的全键盘下都不会出现此问题, 只有在系统九宫格下才会出现此问题开发
我采用的办法就是借助一个boolean值 _view_show
,当为_view_show
为 false 而且输入的字符是@
的时候,进行跳转,当为true的时候不作任何处理,当跳转进界面后设置为true, 当再次回到这个界面时设置为false it
知足条件io
输入的字符必须是 @
class
_view_show
必须为falseList
伪代码
-(void) viewDidAppear{ [super viewDidAppear]; _show_view = false; } //代理方法中的判断逻辑 if ([text isEqualToString:@"@"] && _view_show == false) { //具体的条换逻辑操做 _view_show = true; }
项目具体实现代码
//为了解决代理方法调用屡次的问题 -(void)chatView:(ALNChatView *)chatView replacementTextWithAtText:(NSString *)text { if(_conversation.conversationType != ConversationType_GROUP) return; if ([text isEqualToString:@"@"] && _view_show == false) { __weak __typeof(self) weakSelf = self; ViewController *selectedVC = [[ViewController alloc]init]; selectedVC.dataSourceArray = _groupMemberListArray; selectedVC.saveButtonActionBlock = ^(NSArray *arr){ //block 操做后的, 与此处问题无关 } }; //关键步骤 _view_show = true; [self.navigationController pushViewController:selectedVC animated:YES]; } }