关于UIWindow中的UITextField无法获取焦点的问题

昨天遇到的问题,在UIViewController中弹出一个view,这个view我采取的方式是全屏显示,故想到用UIWindow在做,而这个Window是我自己new出来的,代码如下

UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window = window;
window.windowLevel = UIWindowLevelNormal;
window.backgroundColor = [UIColor clearColor];
window.alpha = 1;
window.hidden = NO;
[window makeKeyAndVisible];

然后在这个new出来的window上添加我自己定义的一个view(暂且叫A),单个view没问题,在这个A上也有UITextView,都能正常获取焦点并输入文字等。但是我又通过这个A弹出另外一个自定义view(暂且叫B),而这个B也是通过像A同样的方式来做的。但问题来了,在这个B上有个UITextField,点击死活也弹不出键盘获取不到焦点。

接下来就是百度谷歌,得到的回答基本上是这个window不是keywindow,然后我设置了keywindow也还是不行。直到今天早上,迷迷糊糊的把new出来的window替换成了程序初始化时候的那个keywindow

UIWindow *window = [UIApplication sharedApplication].keyWindow;

然后运行程序,满怀期望的点击了下UITextField,正如你所料,还是不行,最后实在没辙了,一行行的检查注释,最后发现自己少写了一个约束。大家注意在纯代码写UIScrollView中添加view的时候要记得有个约束千万要加上,我一般在做UIScrollView的时候首先new一个View出来作为UIScrollView的contentView,然后设置如下:

[contentView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(scrollView);
        make.width.equalTo(scrollView);
    }];

子view都添加在这个contentView中,然后千万不要忘了在子view都添加完后要加上如下约束:

[self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.bottom.equalTo(lastView.mas_bottom);
    }];

在这里lastView是我添加在contentView中的最后一个view,这里我的UIScrollView是上下滑动的,如果是左右滑动的话在上面contentView中修改make.width为make.height,make.bottom.equalTo(lastView.mas_bottom)改为make.right.equalTo(lastView.mas_right);

工作这么几年,工作中发现的无数问题,很少是通过求教别人得出答案的,绝大多数问题最后折腾了很久还是自己解决,也勉励下各位新入行的童鞋,求人不如求己,多多思考才是出路。