我们在开发过程中经常会遇到一个问题是,当我们选择输入框时会有键盘跳出覆盖了我们的输入框,这个时候我们需要解决的问题就是:将我们的输入框上移,使它先是在键盘上方:
前提:
在您的h文件中声明一个textfield
@property (retain, nonatomic) IBOutlet UITextField *textView;
首先在viewDIdLoad方法中如下:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardwasShown:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardwasHidden:) name:UIKeyboardDidHideNotification object:nil];
}
这个方法里我们调用了两个方法,一个是键盘显示时的侦听事件的处理,另一个是键盘消失时的侦听事件的处理。
(1)键盘显示时的侦听事件的处理
-(void)keyboardwasShown:(NSNotification *) notify{
CGRect frame = [self.view frame];
if ([[notify name]isEqualToString:UIKeyboardDidShowNotification]) {
[UIView animateWithDuration:0.3 animations:^{
self.view.frame = frame;
}completion:^(BOOL finished) {
//
}];
}
NSDictionary *info = [notify userInfo];
NSValue *aValue = [info objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGSize keyBoardSize = [aValue CGRectValue].size;
CGRect rect = self.textView.frame;
rect.origin.y = self.view.frame.size.height - keyBoardSize.height - rect.size.height;
self.textView.frame = rect;
}
(2)键盘消失时的侦听事件的处理
-(void) keyboardwasHidden:(NSNotification *) notify{
NSDictionary *info = [notify userInfo];
NSValue *aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGSize keyBoardSize = [aValue CGRectValue].size;
CGRect rect = self.textView.frame;
rect.origin.y = self.view.frame.size.height - rect.size.height;
self.textView.frame = rect;
}