点击textField 不显示系统键盘 导致崩溃

最近在做计算器功能时,要实现自定义的键盘操作,所以要隐藏系统键盘,完全不显示。

写完这一段代码之后

 for (id item in [self.viewOfInput subviews])
        {
            if ([item isKindOfClass:[UITextField class]])
            {
                UIView *temp = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
                
                ((UITextField *)item).inputAccessoryView = temp;
                ((UITextField *)item).inputView = temp;
            }else{
                for (id subItem in [item subviews]) {
                    if ([subItem isKindOfClass:[UITextField class]])
                    {
                        UIView *temp = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
                        ((UITextField *)subItem).inputAccessoryView = temp;
                        ((UITextField *)subItem).inputView = temp;
                }
            }
            }
        }

发现一个十分奇怪的问题,同意操作系统在iPhone 7及其他较小屏幕尺寸时,上述代码正常运行。但是在plus以及X尺寸机型运行时,会导致崩溃,且断点无法定位到具体位置。

最终在不断探索中找到了原因,并进行了修改。修改代码如下:

for (id item in [self.viewOfInput subviews]){
            if ([item isKindOfClass:[UITextField class]])
            {
                ((UITextField *)item).inputAccessoryView = [[UIView alloc] initWithFrame:CGRectZero];
                ((UITextField *)item).inputView = [[UIView alloc] initWithFrame:CGRectZero];
            }else{
                for (id subItem in [item subviews]) {
                    if ([subItem isKindOfClass:[UITextField class]])
                    {
                        ((UITextField *)subItem).inputAccessoryView = [[UIView alloc] initWithFrame:CGRectZero];
                        ((UITextField *)subItem).inputView = [[UIView alloc] initWithFrame:CGRectZero];
                }
            }
            }
        }

发现的问题就是,不能将inputAccessoryView 和 inputView 的view设置为同一对象,这样会导致在plus以及X尺寸机型运行时崩溃,其他尺寸无影响

因为项目比较赶,所以具体原因没有找到,暂时这么修改。后续原因我会继续探索。

你可能感兴趣的:(点击textField 不显示系统键盘 导致崩溃)