全栈汇总iOS Developer

ios之发现滴滴一个小bug

2017-02-13  本文已影响149人  _onePiece
  1. 我发现自己有时候是有点强迫症,本来今天是想梳理一下ios各种设计模式的,但是总是想起二月九号在南京玩耍用滴滴时遇到的问题,加个班的话看看今天能不能写完一部分的设计模式。事情是酱紫的,滴滴在第一次使用时先是填写手机号,然后验证码,但是我在填写验证码是键盘无论如何都不能弹出,感觉很是郁闷。想了想很可能是我禁止了系统键盘的缘故,改完后可以正常输入了。看来bug总是很容易不期而遇的,无关公司,无关人力,正所谓众里寻他千百度,那‘人'却在灯火阑珊处。
  2. 另外在弹出notification时,点击按钮后验证码又可以正常输入,这有点奇怪。
    (注释:所有测试均是在7p version:10.2.1下进行。)

bug截图

693147673643E2FABB7028025A8D8CD0.jpg

原因猜测

  1. 在这一步可能不支持第三方键盘,但是考虑到只是个验证码,应该不会这么严格。
  2. 在代理设置方面可能有什么猫腻,导致没有接受到notification。

尝试解决

自己简单的写了个demo,大致如下。

  UITextField * textField = [[UITextField alloc] initWithFrame:CGRectMake(40, 100, 300, 50)];
  self.view.backgroundColor = [UIColor orangeColor];
  textField.backgroundColor =[UIColor whiteColor];
  textField.delegate = self;
  textField.placeholder = @"请输入密码";
  textField.secureTextEntry = YES;
  textField.borderStyle = UITextBorderStyleRoundedRect;
  textField.clearButtonMode = UITextFieldViewModeAlways;
  //设置return的文字
  textField.returnKeyType = UIReturnKeyDone;
  
  [self.view addSubview:textField];
  
  - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    NSLog(@"将开始编辑");
    return YES;
}

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    NSLog(@"将要结束编辑");
    return YES;
}

测试发现就算是我禁止了系统键盘,单独留下搜狗输入法时,确是弹出系统输入法而不是搜狗输入法。当注释掉textField.delegate = self;时,弹出来的是搜狗输入法。由此感觉是第二种猜测肯能是对的。

当我把textField.delegate = self;更换到[self.view addSubview:textField];之后时刚刚那种奇怪的现象没了,就能够在禁止了系统输入法时直接调用搜狗输入法。

监听键盘的四个通知分别为UIKeyboardWillShowNotification、UIKeyboardDidShowNotification、UIKeyboardWillHideNotification、UIKeyboardDidHideNotification,但是没有源码也就不方便进一步的测试了。但是通过这四个通知应该是能更加具体的找出问题所在。比如:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willShowNotification:) name:@"UIKeyboardWillShowNotification" object:nil];
 
 - (void)willShowNotification:(NSNotification*)note {
    NSLog(@"willShowNotification");
}

容易多想,让各位见笑了。若有不足之处,还望指正,非常感谢。

上一篇下一篇

猜你喜欢

热点阅读