最近在做计算器功能时,要实现自定义的键盘操作,所以要隐藏系统键盘,完全不显示。
写完这一段代码之后
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尺寸机型运行时崩溃,其他尺寸无影响
因为项目比较赶,所以具体原因没有找到,暂时这么修改。后续原因我会继续探索。