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方式,一般是新推出一个视图,但是我们想在原有视图上覆盖,像一个弹窗样子,这就要用这个属性了
// 设置页面切换动画效果
viewControllerToPresent.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
// UIModalPresentationOverCurrentContext能在当前 VC上present一个新的VC同时不覆盖之前的内容
viewControllerToPresent.modalPresentationStyle = UIModalPresentationOverCurrentContext|UIModalPresentationFullScreen;
这样设置以后,present 弹窗VC之后,就和添加到window上效果一样了。