iOS开发实战小知识点(三)——键盘、弹窗

1、iOS 键盘适配

iOS系统相对于Android系统开发一个需要额外处理的地方:键盘的适配。Android系统默认处理了键盘,而iOS系统要自己适配键盘。
在iOS 8之前的系统中,可以直接写死键盘高度做适配,但是在系统可以引入第三方键盘之后,键盘的高度不确定了,中英文键盘高度都不一致,所以只能使用通知的方法适配键盘。
在键盘弹出之后,切换键盘UIKeyboardWillShowNotification通知能可能会发多次,也可能不发,也会导致异常。 有人说监听这个属性UIKeyboardWillChangeFrameNotification (iOS 5之后才有)会准确一些。

     //增加监听,当键盘出现或改变时收出消息
   [[NSNotificationCenter defaultCenter] addObserver:self
                                            selector:@selector(keyboardWillShow:)
                                               name:UIKeyboardWillShowNotification
                                               object:nil];
    //增加监听,当键退出时收出消息
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification
                                              object:nil];

- (void)keyboardWillShow:(NSNotification *)notification {
    //获取键盘的高度
    NSDictionary *userInfo = [notification userInfo];
    NSValue *aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardRect = [aValue CGRectValue];
    int height = keyboardRect.size.height;
    NSLog(@"键盘高度是  %d",height);
    //修改视图Frame以适配键盘
}
//当键盘隐藏的时候
- (void)keyboardWillHide:(NSNotification*)aNotification
{
  //将视图还原
}

后来有大神写了第三方库IQKeyboardManager, 不用一句代码自适配键盘,太特么好用了。
关于这个第三方的库具体使用方法很多,详细可自行Google。
试用中出现了一个问题点: View貌似不适用,只能适用于VC???

2、弹窗视图更新

以前做弹窗视图都是添加在keywindow上,直接弹出,消失的时候在remove掉。
[[UIApplication sharedApplication].keyWindow addSubview:self];
假如弹窗有textField,需要适配键盘,IQKeyboardManager 第三方库不起作用了。只能自己适配了,但是在弹窗中添加了键盘通知来进行适配,一直崩溃,显示没有实现keyboardWillShow键盘输出方法,很是纳闷呢,在这处理键盘应该没有问题啊??? 没办法将弹窗换到了VC上。这个也是参考系统的,UIAlertView都废弃了,转移到了UIAlertController上了,我们有什么理由不用VC做弹窗呢。但是在用VC做弹窗的时候,present弹窗时,不是透明底部,还要额外设置一个modalPresentationStyle属性才可以。

3、VC present方式,一般是新推出一个视图,但是我们想在原有视图上覆盖,像一个弹窗样子,这就要用这个属性了

iOS开发实战小知识点(三)——键盘、弹窗_第1张图片
没加前效果.gif
    // 设置页面切换动画效果
    viewControllerToPresent.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    // UIModalPresentationOverCurrentContext能在当前 VC上present一个新的VC同时不覆盖之前的内容
    viewControllerToPresent.modalPresentationStyle = UIModalPresentationOverCurrentContext|UIModalPresentationFullScreen;
iOS开发实战小知识点(三)——键盘、弹窗_第2张图片
添加属性后效果.gif

这样设置以后,present 弹窗VC之后,就和添加到window上效果一样了。

你可能感兴趣的:(iOS开发实战小知识点(三)——键盘、弹窗)