8

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

 3 years ago
source link: https://www.longdw.com/2016/07/16/uiwindow-uitextfield-focus/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

关于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);

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK