阅读 269

【iOS】iOS 11 UITextField 拖拽输入框文字时闪退问题定位

iOS 11中UITextField有了一个新功能,就是用户可以将一个UITextField中的文字拖拽到其他的文本框中,当时在做浏览器,自己写了一UITextField当搜索框,然后有个需求就是:在键盘弹的时候,将UITextField内容变成当前网址,而在键盘收起的时候将UITextField内容变为网站标题接下去是原来代码:

  @weakify(self); 
  //利用RAC监听键盘,当键盘收起的时候先将UITextField改为需要的内容
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillHideNotification object:nil] subscribeNext:^(NSNotification * notification) {  
  @strongify(self);  
 self.searchTextField.text = @"找不到网页"; 
}];
复制代码

然后当你利用UITextField的新特性drag的时候,键盘就会收起来,当你把文字重新drag回UITextField的时候,程序就会闪退,而且没有断点断在崩溃的代码,无法直接定位。

当时百度了很多,有说iOS 11 UITextField内存泄露的之类的,试了下发现都不行,然后一行一行逻辑去检查,注释代码然后进行drag功能,发现就是drag的时候收起键盘的同时,drag和收起键盘的通知同时操作了UITextField,写入了self.searchTextField.text。

发现了问题之后,只好将键盘收起时候的一些逻辑放入了下面代理中。意思就是拖拽的时候收起键盘,然后做一些逻辑处理。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
复制代码

代码如下

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    [self.view endEditing:YES];
    self.searchTextField.text = @"找不到网页";
}
复制代码

这种奇葩闪退,没有断点可以调试,只能一段一段逻辑去排查,网上也没有资料可以参考,因此记录一下。

文章分类
iOS
文章标签