防止键盘盖住控件
防止键盘盖住控件
当程序需要输入时,并且输入框位置靠下时,键盘出现会遮挡输入框.这是开发过程中经常遇到的问题.解决方法就是获取键盘的高度,同时让整个view的位置随键盘而改变.
首先在设计视图中拖入一个textField,位置靠下.
根据通知获取键盘状态
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardWillShowNotification object:nil];
注:这里选择键盘将要出现时触发事件,如果选足didShow,在键盘彻底出现后textfield才会移动,影响视觉.
//改变被背景位置
-(void)keyboardDidShow:(NSNotification *)notif { NSLog(@"键盘已出现"); NSDictionary *info=[notif userInfo]; NSValue *aValue=[info objectForKey:UIKeyboardFrameEndUserInfoKey]; //获取键盘大小 CGSize keyboardSize=[aValue CGRectValue].size; //因为控件的大小不能直接更改,所以借助第三者传递 CGRect viewRect=[self.view frame]; viewRect.origin.y=viewRect.origin.y-keyboardSize.height; self.view.frame=viewRect; }
注:因为无法直接改变高度,所以在这里是通过第三者赋值来传递,如果有更高的方法希望能够告诉我,我再改进.
同样的道理,获取键盘下落通知,改变背景位置
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardDidDisappear:) name:UIKeyboardWillHideNotification object:nil]; -(void)keyboardDidDisappear:(NSNotification *)notif { NSLog(@"键盘下落了"); NSDictionary *info=[notif userInfo]; NSValue *aValue=[info objectForKey:UIKeyboardFrameEndUserInfoKey]; //获取键盘大小 CGSize keyboardSize=[aValue CGRectValue].size; //因为控件的大小不能直接更改,所以借助第三者传递 CGRect viewRect=[self.view frame]; viewRect.origin.y=viewRect.origin.y+keyboardSize.height; self.view.frame=viewRect; }