【代码笔记】iOS-键盘自适应弹出

来源:互联网 发布:拖动拼图验证码java 编辑:程序博客网 时间:2024/06/03 18:28

一,效果图。

二,工程图。

三,代码。

ViewController.h

复制代码
#import <UIKit/UIKit.h>@interface ViewController : UIViewController<UITextFieldDelegate>@end
复制代码

 

ViewController.m

复制代码
#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.            UITextField *field=[[UITextField alloc]initWithFrame:CGRectMake(100, 300, 50, 50)];    field.backgroundColor=[UIColor redColor];    field.delegate=self;    [self.view addSubview:field];                [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];    }#pragma -mark -keyboard notificatin- (void)keyboardWillShow:(NSNotification *)notification {    NSDictionary *info = [notification userInfo];    // keyboardHeight 为键盘高度    CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;    [self animateViewWithKeyboardHeight:keyboardSize.height];}- (void)keyboardWillHide:(NSNotification *)notification {    [self animateViewWithKeyboardHeight:0.0];}- (void)animateViewWithKeyboardHeight:(CGFloat)keyboardHeight {    NSTimeInterval animationDuration = 0.3f;    CGFloat height = self.view.bounds.size.height;    CGFloat width = self.view.bounds.size.width;    CGFloat topSize = 0.0;    CGFloat viewH = self.view.frame.size.height-64;    CGFloat deviceHeight = [UIScreen mainScreen].bounds.size.height;    CGFloat animateH = deviceHeight - viewH - keyboardHeight;    if (animateH >= 0) {        topSize = 0;        CGRect toRect = CGRectMake(0, topSize, width, height);        self.view.frame = toRect;            } else {        topSize = animateH;        CGRect toRect = CGRectMake(0, topSize, width, height);        [UIView animateWithDuration:animationDuration animations:^{            self.view.frame = toRect;        }];    }}#pragma -mark -UITextFieldDelegate-(BOOL)textFieldShouldReturn:(UITextField *)textField{    [textField resignFirstResponder];        return YES;}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end
复制代码