您的位置:首页 > 产品设计 > UI/UE

解决键盘遮挡输入框问题

2015-12-26 00:04 513 查看
- (void)viewDidLoad {
    [super
viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //创键10个输入框
    for (int i=0; i<10; i++)
    {
        UITextField *field = [[UITextField
alloc]initWithFrame:CGRectMake(20,
20+i*60,
200, 50)];
        field.borderStyle =
UITextBorderStyleRoundedRect;
        field.placeholder = [NSString
stringWithFormat:@"第%d个输入框",i];
        //设置输入框代理
        field.delegate =self;
        [self.view
addSubview:field];
    }
    
    //如果输入框被挡住,那么将self.view上移
    
    //先要获取到键盘的frame,才能得知输入框是否被挡住
    //通过添加观察者,来拿到键盘的frame
    
    //监听键盘抬起事件.
    //UIKeyboardWillShowNotification 
系统封装的事件
    [[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 *)noti
{
    //先取到第7个输入框的下边界
    //再取到键盘的上边界
    //如果输入框的下边界 -
键盘的上边界  大于0,则代表遮挡
    NSLog(@"KeyboardWillShow");
    
    //1.取到输入框的上边界
    //取到通知信息
    NSDictionary *dic = noti.userInfo;
    NSLog(@"dic==%@",dic);
    //接收键盘高度信息
    NSValue *keyboardValue = [dic
objectForKey:@"UIKeyboardFrameEndUserInfoKey"];
    CGRect keyboardRect = keyboardValue.CGRectValue;
    
    //2.计算输入框与键盘的间隔
    //输入框框下边界 -
键盘上边界
    NSInteger offset =
_selectField.frame.origin.y +_selectField.frame.size.height
- keyboardRect.origin.y;
    
    //大于0代表遮挡
    if (offset >0)
    {
        //将self.view上移offset个高度
        self.view.frame =
CGRectMake(0, -offset,
self.view.frame.size.width,
self.view.frame.size.height);
    }
}
- (void)KeyboardWillHide:(NSNotification *)noti
{
    NSLog(@"KeyboardWillHide");
    //键盘消失,self.view还原位置
    self.view.frame =
self.view.bounds;
}
#pragma mark - UITextFieldDelegate
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    //开始编辑的时候,记下选择输入框
    //这样才能拿到当前输入框的frame
    _selectField = textField;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    //让键盘掉下,触发KeyboardWillHide回调
    [textField resignFirstResponder];
    return
YES;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息