键盘遮挡输入框的问题
iOS开发之“键盘遮挡输入框的解决办法”之一 -----键盘通知之前处理这种问题,总是在触发输入框编辑事件键盘弹出的时候,将当前的View整体向上移动,结束编辑又整体向下移,耗时耗力效率低。
在网上看了使用键盘通知的方法很是方便,所以写了个demo供初学者参考!
1.在ViewController.m文件声明
#import "ViewController.h" @interface ViewController ()<UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate> @property(nonatomic,strong)UITableView *tableView;//自定义表格TableView @end @implementation ViewController
2.初始化及添加通知观察者
1 - (void)viewDidLoad { 2 [super viewDidLoad]; 4 self.tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStylePlain]; 5 self.tableView.delegate = self; 6 self.tableView.dataSource = self; 7 [self.view addSubview:self.tableView]; 8 9 //键盘将要显示时候的通知 10 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(boardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 11 //键盘将要结束时候的通知 12 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(boardDidHide:) name:UIKeyboardDidHideNotification object:nil]; 13 }
3.实现通知的响应方法
1 -(void)boardWillShow:(NSNotification *)sender{ 2 //获得键盘的尺寸 3 CGRect keyBoardRect=[sender.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; 4 //当键盘将要显示时,将tableView的下边距增跟改为键盘的高度 5 self.tableView.contentInset = UIEdgeInsetsMake(0, 0, keyBoardRect.size.height, 0); 6 } 7 8 -(void)boardDidHide:(NSNotification *)sender{ 9 //当键盘将要消失时,边距还原初始状态 10 self.tableView.contentInset = UIEdgeInsetsZero; 11 }
4.UITextField的代理事件(点击键盘中的return按钮,隐藏键盘)
1 -(BOOL)textFieldShouldReturn:(UITextField *)textField{ 2 //取消当前输入框的第一响应者 3 [textField resignFirstResponder]; 4 return YES; 5 }
5.tableView的代理方法
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return 15; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *ider = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ider]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ider]; } UITextField *TF = [[UITextField alloc] initWithFrame:CGRectMake(100, 5, 150, 20)]; TF.placeholder = @"请输入"; TF.delegate =self; //文本框添加代理 [cell.contentView addSubview:TF]; cell.textLabel.text = @"测试"; return cell; }
@end
6.结束!