- 我發(fā)現(xiàn)自己有時候是有點強迫癥左医,本來今天是想梳理一下ios各種設計模式的痘番,但是總是想起二月九號在南京玩耍用滴滴時遇到的問題,加個班的話看看今天能不能寫完一部分的設計模式赞赖。事情是醬紫的异袄,滴滴在第一次使用時先是填寫手機號,然后驗證碼玛臂,但是我在填寫驗證碼是鍵盤無論如何都不能彈出烤蜕,感覺很是郁悶。想了想很可能是我禁止了系統(tǒng)鍵盤的緣故迹冤,改完后可以正常輸入了讽营。看來bug總是很容易不期而遇的泡徙,無關公司橱鹏,無關人力,正所謂眾里尋他千百度堪藐,那‘人'卻在燈火闌珊處莉兰。
- 另外在彈出notification時,點擊按鈕后驗證碼又可以正常輸入礁竞,這有點奇怪糖荒。
(注釋:所有測試均是在7p version:10.2.1下進行。)
bug截圖
693147673643E2FABB7028025A8D8CD0.jpg
原因猜測
- 在這一步可能不支持第三方鍵盤模捂,但是考慮到只是個驗證碼捶朵,應該不會這么嚴格蜘矢。
- 在代理設置方面可能有什么貓膩,導致沒有接受到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;
}
測試發(fā)現(xiàn)就算是我禁止了系統(tǒng)鍵盤红碑,單獨留下搜狗輸入法時舞吭,確是彈出系統(tǒng)輸入法而不是搜狗輸入法。當注釋掉textField.delegate = self;時句喷,彈出來的是搜狗輸入法镣典。由此感覺是第二種猜測肯能是對的。
當我把textField.delegate = self;更換到[self.view addSubview:textField];之后時剛剛那種奇怪的現(xiàn)象沒了唾琼,就能夠在禁止了系統(tǒng)輸入法時直接調用搜狗輸入法兄春。
監(jiān)聽鍵盤的四個通知分別為UIKeyboardWillShowNotification、UIKeyboardDidShowNotification锡溯、UIKeyboardWillHideNotification赶舆、UIKeyboardDidHideNotification,但是沒有源碼也就不方便進一步的測試了祭饭。但是通過這四個通知應該是能更加具體的找出問題所在芜茵。比如:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willShowNotification:) name:@"UIKeyboardWillShowNotification" object:nil];
- (void)willShowNotification:(NSNotification*)note {
NSLog(@"willShowNotification");
}
容易多想,讓各位見笑了倡蝙。若有不足之處九串,還望指正,非常感謝寺鸥。